Вывести на экран слова исходной строки, встречающиеся в ней только один раз
Этот код рабочий,однако его легко сломать, если ввести слишком много пробелов, а после них уникальное слово. Например его может сломать строчка: " много пробелов 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]);
}
}