• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

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

  • Автор темы Автор темы Katish
  • Дата начала Дата начала
K

Katish

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

Код:
#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 ничего не записывается. Укажите пожалуйста ошибки.
 
Спасибо, исправила. Но программа всё равно работает не коректно. Если раньше постоянно выводило пустую(с символами похожими на шрифт windings) строку то тепер через раз выдаёт нужно слово(если в предложении их всего 2), а точнее не всё слово а только выборочные(откровенно непонятно по какому принципу) символы из него.
 
внимательно со счетчиками в цикле)
тут и не надо, т.к. есть

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

Добавлено:
for (j=i+1;(s[j]!=' ');j++)
{ sl[l++]=s[j];
j++;
}
та же история - зачем счетчик плюсовать дополнительно тут: j++;
 
OKEN:
Ещё раз спасибо. Теперь всё работает. И ещё один дурацкий вопрос: как размер массива sl сделать не чётко определённым? (Видимо пропустила кусок теории)Просто выводит ровно заданное число символов, добирая недостающие из первого слова массива sl. И почему-то в конце ставит символ y.
P.S. Немогу понять как вам рейтинг поднять, с пеной у рта нажимаю на "+" возле репутации но эффекта 0.

rrrFer:
Спасибо, но компилятор воспринимает new char и delete как неопределённые переменные. Видимо эти операторы не входят в синтаксис С.
 
для + мало сообщений, не переживайте.
по С массивам сходу не подскажу, слишком давно все учила, и больше с++, не помню, я боюсь наврать(
погуглите)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!