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

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

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

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

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;
}
Эта работа вам не подошла?

Вы всегда можете заказать любую учебную работу у наших авторов от 20 руб.

8   голосов, оценка 3.875 из 5


СДЕЛАЙТЕ РЕПОСТ