• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

EmptyR

Веб мастер
06.10.2010
153
0
BIT
0
Есть строка (вводится с клавиатуры или просто задана сразу, не важно). Нужно посчитать сколько раз каждое слово встречается в этой строке.
Не могу понять как правильно вывести на экран слова. Например строка "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 части - обработанную и необработанную.
сейчас, видимо, ты ищешь подстроку в необработанной части, но сначала нужно искать слово в обработанной части, и в случае, если оно там есть - в необработанной части искать уже ненадо
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!