Напечатать все слова, которые встречаются в строке только по одному разу. - 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; }
Объяснение кода листинга программы
В этом коде:
- Объявлены массив символов
str
для чтения строки с помощьюscanf
, а также указательptr
и массив указателейword
для хранения уникальных слов. - Используется функция
strtok
для разделения строки на слова, используя запятую, точку и пробел в качестве разделителей. - Слово сохраняется в массиве
word
до тех пор, пока не будет повторения. - После того, как все слова были добавлены в массив
word
, каждое слово проверяется на уникальность, сравнивая его с каждым другим словом. Если слово уникально, оно выводится на экран. - Функция
strcmp
используется для сравнения двух строк, аbreak
используется для выхода из цикла, если слово уже было обнаружено. - Если слово не было найдено во время проверки, оно выводится на экран.
- В конце программы возвращается 0, что означает успешное выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д