Обработка файлов данных — найти количество слов в файле

У меня есть этот домашний вопрос:

Напишите функцию в C ++, чтобы подсчитать наличие слова ‘делать‘в текстовом файле.

Что я пробовал:

Я пытался сначала найти слово «d«в текстовом файле, а затем искать»о‘если присутствует сразу после него.

#include <iostream>
#include <fstream>

using std::fstream;
using std::cout;
using std::ios;

int main()
{
char ch[10];
int count=0, a=0;
fstream f;
f.open("P.txt", ios::in);

while(!fin.eof())
{
fin.get(ch)
if (ch[a]=='d')
{
if ((a++)=='o')
count++;
}
a++;
}
cout << "the no of do's is" << count;
f.close();
}

но эта идея совершенно бесполезна. Я не могу думать ни о каких других идеях. Я хотел бы иметь намек относительно этого в двух сценариях:

1. считать слово «до» независимо существующим.

2. Подсчитайте слово «делать» в любом месте текста.

это вопрос обработки файла данных.

-7

Решение

Алгоритм следует из того, что у вас есть. Структурируйте цикл while следующим образом:

while(!fin.eof()) {
bool found = false;
do {
fin.get(ch);
found = found || ch == 'd';
} while (ch == 'd' && fin);

if (found && ch == 'o') {
// boom goes the dynamite
}
}

Цель do-while это устранить повторение ds, так что после этого цикла вы просто проверяете, является ли следующий символ o,

Заметка

  • С точки зрения набора текста, тип для ch должно быть char ch

Разъяснения

  • while(!fin.eof())
    • Повторите следующие несколько строк, пока мы не достигнем конца файла
  • do {
    • Начало do-while петля
  • fin.get(ch);
    • Прочитать один байт (символ) из файла
  • found = found || ch == 'd';
    • Задавать found истина, если мы уже нашли d или текущий символ d
  • } while (ch == 'd' && fin);
    • Конец чего-либо do-while, Повторяйте цикл, пока последний прочитанный символ не станет d или мы достигли конца файла
  • if (found && ch == 'o') {
    • Если бы мы смогли удовлетворить условие для установки found истина и последний символ, который мы читаем o
  • // boom goes the dynamite
    • тогда мы успешно нашли слово do

без std::ios::eof

Я не буду объяснять это в следующий раз, но это будет тесно связано с тем, что я уже опубликовал. Цель здесь — защитить себя от чтения уже пустого файла.

while(fin >> ch) {
while(ch == 'd' && fin.get(ch)) {
if (ch != 'd') {
if (ch != 'o') {
break;
}
// Found it!
}
}
}
1

Другие решения

Других решений пока нет …