Поиск одинакового слова в файле в СИ
Смог написать код, который ищет одинаковые слова, но не так как хотелось бы. Нужно,чтобы он выводил примерно так: "the"= 2;(то есть нашел слово "the" 2 раза в тексте). И еще вопрос, можно ли как то проверять условие конца цикла не в ручную(сейчас у меня в тексте 3 строки, поэтому цикл меньше 3) Тут я записываю все слова из файле:
printf("\nТекст файла\n\n");
for (int i = 0; i < 3; i++) {
istr = fgets(str, LEN, fp);
printf("%s", istr);
for (char* istr = strtok(str, " .\t\n"); istr; istr = strtok(NULL, " .\t\n")) {
strcpy(arr[k++], istr);
}
}
Тут ищу похожие слова в файле:
printf("\nНахождение одинаковых слов\n\n");
for (int i = 0; i < words; i++) {
for (int j = i + 1; j < words; j++) {
if (strcmp(arr[i], arr[j]) == 0) {
printf("%s==%s\n", arr[i], arr[j]);
}
}
}
Ответы (1 шт):
Автор решения: Gleb Igorevich
→ Ссылка
Возможно где то допустил ошибки синтаксические... Давненько на с/с++ не программировал... (Реализация на с++) На работоспособность не проверял...
char ** array = new char*[10000];
size_t count[10000];
size_t length = 0;
const char * str = "Any text...";
array[length] = strtok(str, " ,.-!;\t");
while(array[length]){ // До тех пор пока указатель не равен \0 (Это конец строки) - будем искать слова и добавлять их в массив.
array[++length] = strtok(NULL, " ,.-");
}
size_t k = 0;
size_t counter = 0;
for(size_t i=0; i < length; ++i){
for(size_t j=0; j < length; ++j){
if(array[j] == array[i] && j != i){
counter++;
}
}
count[k++] = counter;
}
// Вывод:
for(size_t i=0; i < length; ++i){
cout << array[i] + " = " + count[i] << endl;
}
delete array;