Помогите С Решением Подсчёта Количества Слов В Строке

EmptyR

Веб мастер
06.10.2010
164
0
#1
Есть строка (вводится с клавиатуры или просто задана сразу, не важно). Нужно посчитать сколько раз каждое слово встречается в этой строке.
Не могу понять как правильно вывести на экран слова. Например строка "123 321 123 123321".
Нужно вывести так:
123: 2
321: 1
123321: 1


У меня выводи так:
123: 2
321: 1
123: 1
123321: 1


Вот код на си:

Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
int word_len, i = 0, j, k = 0;
char *main_str = "123 321 123 456 123321 123", *sub_str = " ", word[80], **mas_str;
mas_str = (char **) calloc(strlen(main_str)/2, sizeof(char *));
while (strlen(main_str))
{
k++;
char *ptr = strstr(main_str, sub_str);
if (ptr == 0) 
{
mas_str[i] = (char*) calloc(1, sizeof(char));
strcpy(word, main_str);
strcpy(mas_str[i], word);
printf("slovo: %s\n", word);
break;
} else {
word_len = strlen(main_str) - strlen(ptr);
mas_str[i] = (char*) calloc(1, sizeof(char));
strncpy(word, main_str, word_len);
word[word_len] = '\0';
strcpy(mas_str[i], word);
main_str+=word_len+1;
printf("slovo: %s\n", word);
}
i++;
}
printf("Kolichestvo slov = %d\n", k);



for (i=0; i<k; i++)
{
int tmp = 1;
for (j=i+1; j<k; j++)
{
if (strcmp(mas_str[i], mas_str[j]) == 0) tmp++; 
}
printf("slovo %s vstrechaetsa %d raz\n", mas_str[i], tmp);
}
getchar();
return 0;
}
Заранее спасибо.
 
R

rrrFer

#2
строку делишь на 2 части - обработанную и необработанную.
сейчас, видимо, ты ищешь подстроку в необработанной части, но сначала нужно искать слово в обработанной части, и в случае, если оно там есть - в необработанной части искать уже ненадо