Строка и работа с предложением

Тема в разделе "C/C++/C#", создана пользователем Katish, 28 мар 2010.

  1. Katish

    Katish Гость

    Здравствуйте. Требуется программа на С, которая в введённой строке(строка идёт как предложение) подсчитывает количество цифр и отображает все слова предложения, которые содержат последнюю букву предыдущего слова не менее 2-х раз. Зараннее спасибо.
     
  2. Katish

    Katish Гость

    В целом с цифрами разобралась. Но со второй часть. пробемы. Есть такие мысли:

    Код (Text):
    #include <conio.h>
    #include <stdio.h>
    void main()
    {
    char s[20],sl[10]; /* s-предложение sl- массив с подходящими словами*/
    int i=0,c=0,j,m,l=0;
    clrscr();
    printf("vvedite stroky: ");
    gets(s);
    for(i=0;(s[i]!='\0');i++)
    { if((s[i]>='0')&&(s[i]<='9'))
    {
    c++;
    }
    }
    printf("%d\n",c);
    /* Цифры посчитали*/
    i=0;
    c=0;
    for(i=0;(s[i]!='\0');i++)
    {
    m=0; /* Счётчик кол-ва повторений последнего символа пред.слова*/
    l=0;
    if(s[i]==' ')
    {c=i-1;
    for (j=i+1;(s[j]!=' ');j++)
    {
    if (j==c)
    m++;
    }
    if(m>=2)
    {
    for (j=i+1;(s[j]!=' ');j++)
    { sl[l++]=s[j];
    j++;
    }
    }
    }
    i++;
    }
    printf("%s",sl);
    getch();
    }
    Проблема, насколько я поняла в том что в массив sl ничего не записывается. Укажите пожалуйста ошибки.
     
  3. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    непонятно, как получислось бы (j==c), если с=i-1, а стартовое значение j=i+1 и цикл возрастающий...
    (s[j]==s[c])?
     
  4. Katish

    Katish Гость

    Спасибо, исправила. Но программа всё равно работает не коректно. Если раньше постоянно выводило пустую(с символами похожими на шрифт windings) строку то тепер через раз выдаёт нужно слово(если в предложении их всего 2), а точнее не всё слово а только выборочные(откровенно непонятно по какому принципу) символы из него.
     
  5. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    внимательно со счетчиками в цикле)
    тут и не надо, т.к. есть

    можно выше на одну } (после 2-го for (j=...) закрытия условия if(m>=2) установить позицию на пробел с помощью i=j (или i=j-1 - Вам надо детальней посмотреть), чтоб цикл не крутить зря, слово-то уже просмотрено.
    Главное, символ конца строки не пропустить...

    Добавлено:
    та же история - зачем счетчик плюсовать дополнительно тут: j++;
     
  6. Katish

    Katish Гость

    OKEN:
    Ещё раз спасибо. Теперь всё работает. И ещё один дурацкий вопрос: как размер массива sl сделать не чётко определённым? (Видимо пропустила кусок теории)Просто выводит ровно заданное число символов, добирая недостающие из первого слова массива sl. И почему-то в конце ставит символ y.
    P.S. Немогу понять как вам рейтинг поднять, с пеной у рта нажимаю на "+" возле репутации но эффекта 0.

    rrrFer:
    Спасибо, но компилятор воспринимает new char и delete как неопределённые переменные. Видимо эти операторы не входят в синтаксис С.
     
  7. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    У вас нет прав, но я могу сделать это за вас
     
  8. Katish

    Katish Гость

    Сделайте пожалуйста, OKEN за оба сообщения и rrrFer.
     
  9. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    для + мало сообщений, не переживайте.
    по С массивам сходу не подскажу, слишком давно все учила, и больше с++, не помню, я боюсь наврать(
    погуглите)
     
  10. Katish

    Katish Гость

    rrrFer:
    Спасибо, работает на отлично.
     
Загрузка...
Похожие Темы - Строка работа предложением
  1. alexas1
    Ответов:
    1
    Просмотров:
    446
  2. shkeat
    Ответов:
    1
    Просмотров:
    1.676
  3. NickProstoNick
    Ответов:
    1
    Просмотров:
    2.305
  4. KiR
    Ответов:
    7
    Просмотров:
    9.451
  5. eugira
    Ответов:
    5
    Просмотров:
    5.402

Поделиться этой страницей