Напечатать все слова, которые встречаются в строке только по одному разу. - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Вот такая вот задача: Дана строка s, содержащая от 1 до 30 слов, в каждом из которых от 1 до 5 строчных латинских букв. Между соседними словами стоит запятая, за последним словом - точка. Напечатать все слова, которые встречаются в строке только по одному разу.

Решение задачи: «Напечатать все слова, которые встречаются в строке только по одному разу.»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
 
#define SIZE 256
#define WORDS 30
#define DELIMS ",. "
 
int main(void)
{
    char str[SIZE] = "", *ptr = NULL, *word[WORDS] = { NULL };
    size_t counter = 0, i, j, flag;
    
    if (scanf("%255[^\n]", str) == 1 && fgetc(stdin) == '\n')
    {
        for (
                ptr = strtok(str, DELIMS);
                ptr != NULL && counter < WORDS;
                ++counter, ptr = strtok(NULL, DELIMS)
            )
        {
            word[counter] = ptr;
        }
        
        for (i = 0; i < counter; ++i)
        {
            flag = 0;
            for (j = 0; j < counter; ++j)
            {
                if (i != j && strcmp(word[i], word[j]) == 0)
                {
                    flag = 1;
                    break;
                }
            }
            
            if (flag == 0)
                printf("%s\n", word[i]);
        }
    }
    
    return 0;
}

Объяснение кода листинга программы

В этом коде:

  1. Объявлены массив символов str для чтения строки с помощью scanf, а также указатель ptr и массив указателей word для хранения уникальных слов.
  2. Используется функция strtok для разделения строки на слова, используя запятую, точку и пробел в качестве разделителей.
  3. Слово сохраняется в массиве word до тех пор, пока не будет повторения.
  4. После того, как все слова были добавлены в массив word, каждое слово проверяется на уникальность, сравнивая его с каждым другим словом. Если слово уникально, оно выводится на экран.
  5. Функция strcmp используется для сравнения двух строк, а break используется для выхода из цикла, если слово уже было обнаружено.
  6. Если слово не было найдено во время проверки, оно выводится на экран.
  7. В конце программы возвращается 0, что означает успешное выполнение.

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


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

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

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