Задать вопрос
m_avrina
@m_avrina
Студентота.

Как искать повторяющиеся слова в строке?

void counter_of_all_word(int count, int max, char**mass_of_all_word,int *mass)
{
	int temp_count = 0;
	char **empty_mass = (char**)malloc(count * sizeof(char*));
	for (int i = 0; i < count; i++)
		empty_mass[i] = (char*)malloc(max * sizeof(char));
	int *count_mass = (int*)malloc(count * sizeof(int));
	int i = 0, j = 0;
	int flag = 0;
	for (i = 0; i < count; i++)
	{
		flag = 0;
		for (j = 0; j < count; j++)
		{			
			flag = 0;
			if (empty_mass[j] == mass_of_all_word[j])
			{
				temp_count +1;
				count_mass[i] = temp_count;
			}
			else
				for (int k = 0; k < count; k++)
				{
					if (empty_mass[k] == mass_of_all_word[j])
					{
						flag = 1;
						i++;
						break;
					}
					else
					{
						empty_mass[j] = mass_of_all_word[j];
						break;
					}
				
				}
			if (flag == 1)
				break;
		}
	}
	for (i = 0; i < count; i++)
		printf(" %d)%d ",i,count_mass[i]);

}


Сломалась голова(
Нужно подсчитать кол-во одинаковых слов в массиве строк и записать их парами
"слово-кол-во"
Но что-то не так;c
Выше функция подсчета
  • Вопрос задан
  • 3021 просмотр
Подписаться 1 Оценить Комментировать
Ответ пользователя Павел Каптур К ответам на вопрос (2)
drem1lin
@drem1lin
чуть программист, чуть чуть админ...
Что я вижу сразу - вы не вернете ни как отсюда значение. Если речь идет именно о C, то я бы начал с того, что определил бы структуру типа:
struct WordCount{
char word[256];
unsigned int counters;
}

но так как количество слов заранее не известно, надо делать динамический массив таких структур, или список.
далее находя слово, ищете структуру и в ней увеличиваете счетчик на 1. Если не нашли, то создаете новую. Элементарно решается с помощью std::list, но это уже с++.
Если говорить об ошибках - вы ни где не выделяете слова, так empty_mass[j] == mass_of_all_word[j] вы копируете указатель на строку.
Что бы я сделал:
1. все же описать структуры, тогда вы не перепутаете индексы
2. разделить код на функции, например, функция обработки строки -> передать указатель на массив структур со словами и строку -> в ней вызвать код дробления строки на слова и получить двумерный массив слов, которые потом добавить в массив структур со словами или обработать строку как вам удобно и в цикле пройти все строки
3. добавить обработку возвращаемых значений функций
Ответ написан
Комментировать