Дан текст. Преобразуйте текст, удалив слова, в которых есть заданная подстрока. - C (СИ)
Формулировка задачи:
Дан текст. Преобразуйте текст, удалив слова, в которых есть заданная подстрока.
Пример: "Кто был ничем, тот станет всем". Подстрока "то".
Результат: "был ничем, станет всем".
Помогите с алгоритмом, не пойму как удалить всё слово и с помощью сдвига ли?
И как распознать слова в котором встречается данная подстрока.
Решение задачи: «Дан текст. Преобразуйте текст, удалив слова, в которых есть заданная подстрока.»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
main()
{
char stroka[100],slovo[20],podstroka[5];
int i,j,k;
k=0; //индекс в слове
printf("Enter string: ");
gets(stroka);
printf("Enter substring: ");
gets(podstroka);
for(i=0;i<strlen(stroka)+1;i++) //цикл по всей строке
{
if ((stroka[i]!=' ')&&(i!=strlen(stroka))) //пока не доходим до пробела или конца строки записываем символы как отдельное слово
{
slovo[k]=stroka[i]; // пишем слово в массив
k++;
}
else //если дошли до пробела
{
if(strstr(slovo,podstroka)==NULL) // ищем подстроку в нашем слове
{
for(j=0;j<k;j++)
printf("%c",slovo[j]); //если подстрока не найдена - выводим слово
printf(" ");
}
k=0;
}
}
printf("\n");
system("pause");
}
Объяснение кода листинга программы
- В начале определяются две строки:
strokaиpodstroka, а также переменнаяkдля хранения индекса в слове. - Пользователю предлагается ввести строку и подстроку.
- Затем идет цикл по всем символам входной строки. Если текущий символ не является пробелом и не является последним символом строки, он добавляется в
slovoи увеличиваетсяk. - Если текущий символ является пробелом, проверяется наличие подстроки в слове. Если подстрока не найдена, текущее слово выводится на экран.
- После обработки всех слов, выводится символ новой строки.
- В конце программа ожидает нажатия клавиши
pauseдля завершения работы.