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

  • Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

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

Katish

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

Katish

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

Код:
#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 ничего не записывается. Укажите пожалуйста ошибки.
 
K

Katish

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

hosm

внимательно со счетчиками в цикле)
тут и не надо, т.к. есть

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

Добавлено:
for (j=i+1;(s[j]!=' ');j++)
{ sl[l++]=s[j];
j++;
}
та же история - зачем счетчик плюсовать дополнительно тут: j++;
 
K

Katish

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

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

hosm

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

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