Найти все уникальные слова. Написать комментарии к коду - C (СИ)
Формулировка задачи:
Есть готовый код к задаче:
Дана строка s, содержащая от 1 до 30 слов, в каждом из которых от 1 до 5
строчных латинских букв. Между соседними словами стоит запятая, за
последним словом - точка. Напечатать все слова, которые встречаются в строке
только по одному разу.
_______________
Помогите разобраться в коде, не хочу тупо сдать лабу, хочу понять код, можно просто по добавлять комментарии к коду, буду очень благодарен
#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;
}
Поднимаю
апп
Актуально
апп
апп
Очень актуально
Поднимаю
Апп
Апп
Апп
Решение задачи: «Найти все уникальные слова. Написать комментарии к коду»
textual
Листинг программы
(scanf("%255[^\n]", str) == 1 && fgetc(stdin) == '\n')
Объяснение кода листинга программы
scanf(%255[^\n], str)- этот код считывает строку из стандартного ввода, ограниченную 255 символами и оканчивающуюся символом новой строки. Здесьstr- это указатель на строку, которую нужно считать. Форматная спецификатор%255[^\n]означает:считать максимально возможное количество символов, кроме символа новой строки, и сохранить их в строку. Возвращаемое значениеscanfбудет 1, если считывание прошло успешно, и 0 в противном случае. Поэтому условие(scanf(%255[^\n], str) == 1)проверяет, было ли успешно считано хотя бы одно слово.fgetc(stdin) == '\n'- этот код считывает символ из стандартного ввода и проверяет, является ли он символом новой строки. Здесьstdin- это файловый дескриптор для стандартного ввода. Если считанный символ является символом новой строки, то условие возвращаетtrue, иначе -false. Поэтому это условие проверяет, было ли считано полное слово, а не часть следующего слова. Вывод: данный код считывает слова из стандартного ввода до тех пор, пока не встретит символ новой строки. Каждое считанное слово сохраняется в строкуstr.