Удалить подряд идущие вхождения слов в предложениях - C (СИ)
Формулировка задачи:
Дана строка, содержащая текст на русском языке. В предложениях некоторые из слов записаны подряд несколько раз (предложение заканчивается точкой или знаком восклицания). Получить в новой строке отредактированный текст, в котором удалены подряд идущие вхождения слов в предложениях.
Помогите, пожалуйста разобраться с задачкой, я что-то совсем запуталась, вот мой вариант, но работает неверно.
#include <stdio.h>
#include <string.h>
int main()
{
char str1[1024], *str, *str3;
fgets (str1,1024,stdin);
str=strtok(str1, " ");
while (str){
str3=strtok(NULL, " ");
if (*str!=*str3)
printf ("%s ", str);
str=strtok(NULL, " ");
}
return 0;
}Решение задачи: «Удалить подряд идущие вхождения слов в предложениях»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
int main ()
{
char str [300];
char newStr [300];
char sep [] = {' ', ',', '.'};
char * p = NULL;
char * prev = NULL;
newStr [0] = '\0';
gets (str);
p = strtok (str, sep);
prev = "";
while (p != NULL)
{
if (strcmp (prev, p) != 0)
{
strcat (newStr, p);
strcat (newStr, " ");
}
prev = p;
p = strtok (NULL, sep);
}
puts (newStr);
p = prev = NULL;
return 0;
}
Объяснение кода листинга программы
Этот код на C удаляет повторяющиеся слова из предложений, вводимых пользователем. Вот список действий, которые происходят в коде:
- Вводится строка, содержащая предложение, с помощью функции gets().
- Создается пустая строка newStr, которая будет содержать предложение без повторяющихся слов.
- Создается пустой массив sep, содержащий символы, которые используются в качестве разделителей (пробел, запятая, точка).
- Инициализируется указатель p = NULL и prev = NULL.
- В цикле while с помощью функции strtok() происходит разбиение входной строки на отдельные слова и добавление их в newStr, если они не совпадают с предыдущим словом.
- После завершения цикла выводится итоговая строка newStr с помощью функции puts().
- Указатели p и prev обнуляются, и функция возвращает 0, что означает успешное завершение программы.