Удалить подряд идущие вхождения слов в предложениях - 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 удаляет повторяющиеся слова из предложений, вводимых пользователем. Вот список действий, которые происходят в коде:

  1. Вводится строка, содержащая предложение, с помощью функции gets().
  2. Создается пустая строка newStr, которая будет содержать предложение без повторяющихся слов.
  3. Создается пустой массив sep, содержащий символы, которые используются в качестве разделителей (пробел, запятая, точка).
  4. Инициализируется указатель p = NULL и prev = NULL.
  5. В цикле while с помощью функции strtok() происходит разбиение входной строки на отдельные слова и добавление их в newStr, если они не совпадают с предыдущим словом.
  6. После завершения цикла выводится итоговая строка newStr с помощью функции puts().
  7. Указатели p и prev обнуляются, и функция возвращает 0, что означает успешное завершение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5
Похожие ответы