//Дана строка в стиле Си. Группы символов, разделенные пробелами(одним или несколькими)
//и не содержание пробелов внутри себя, будем называть словами.
//Для каждого из слов указать сколько раз оно встречается среди всех слов данной строки.
#include <stdio.h>
#include <string.h>
int f(char* w, char* words, int words_n, int counters[]){ // добавлять слово в список слов, если оно новое,
// и увеличивать его счетчик, если оно не новое
// проверить, есть ли w в words и если есть, запомнить номер
int found_n = -1;
for(int i =0; i<words_n ; i++)
if(strcmp(&words[i], w) == 0){
found_n = i;
}
if(found_n == -1){ // добавить
strcpy(&words[words_n], w);
return words_n + 1;
}
else{ // прибавить к нужному счетчику 1
counters[found_n]++;
return words_n;
}
}
void iterate_words(char *s){ // должна вызывать f от каждого слова
char words[80][100];
int counters[80];
int words_n = 0; //
char word[100];
int pos = 0;
for(int i=0; s[i]!='\0'; i++){
if(s[i] == ' ' ){
word[pos] = '\0';
if(pos > 0){
words_n=f(word, *words, words_n, counters);
pos=0;
}
}
else{
word[pos]=s[i];
pos++;
}
}
if(pos > 0)
words_n = f(word, *words, words_n, counters);
// здесь вывести все значения words и counters: apple: 10
for(int i=0; i<words_n; i++)
printf("%s: %d ", words[i], counters[i]);
}
int main(){
char s[8000];
puts("введите строку");
gets(s);
iterate_words(s);
return 0;
}