У меня есть этот домашний вопрос:
Напишите функцию в 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. Подсчитайте слово «делать» в любом месте текста.
это вопрос обработки файла данных.
Алгоритм следует из того, что у вас есть. Структурируйте цикл 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
это устранить повторение d
s, так что после этого цикла вы просто проверяете, является ли следующий символ 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!
}
}
}
Других решений пока нет …