Вывести на экран слова исходной строки, встречающиеся в ней только один раз

Этот код рабочий,однако его легко сломать, если ввести слишком много пробелов, а после них уникальное слово. Например его может сломать строчка: " много пробелов qw ew bhb qw". Помогите поправить этот код.

  #include <stdio.h>
        #include <string.h>
        #include <stdlib.h>
        int main()
        {
            char str[100];
            fgets(str, 100, stdin);
            fflush(stdin);
            char str2[100], str3[100];
            int lw, ls, chk, temp, i, j, lw2;
            strcpy(str3, str);
            char *p = strtok(str, ", ");
            do
            {
                
                lw2 += strlen(p) + 1;
                for(int i = 0; i < lw2; i++)
                {
                    str3[i] = ' ';
                }
                if(strstr(str3, p) == NULL)
                {
                    strcat(str2, p);
                    strcat(str2, " ");
                    //printf("%s\n", str2);
                }
                else
                {   
                    ls = strlen(str3);
                    lw = strlen(p);
                    for(i = 0; i < ls; i++)
                    {
                        temp = i;
                        for(j = 0; j < lw; j++)
                        {
                            if(str3[i] == p[j])
                            i++;
                        }
                        chk = i-temp;
                        if(chk == lw)
                        {
                            i = temp;
                            for(j = i; j < (ls - lw); j++)
                            {
                                str3[j] = str3[j + lw];
                                ls = ls - lw;
                                str3[j] = '\0';
                            }
                        }
                        
                        
                        strcpy(str, str3);
                    }   
                }
            }
            while(p == strtok(NULL, ", "));
            printf("%s\n", str2);
            return 0;
        } 

Ответы (1 шт):

Автор решения: Harry

Как я уже писал, проще набросать свое решение...

int main()
{
    char str[100];
    fgets(str, 100, stdin);
    char * w[50];
    int wcount = 0;
    for(char * p = strtok(str," ");p;p = strtok(0," "))
        w[wcount++] = p;
    for(int i = 0; i < wcount; ++i)
    {
        int dbl = 0;
        for(int j = 0; j < wcount; ++j)
            if (i != j && strcmp(w[i],w[j]) == 0) { dbl = 1; break; }
        if (dbl) continue;
        printf("%s ",w[i]);
    }
}
→ Ссылка