数据文件处理 - 查找文件中的字数

Data File Handling - find count of word in file

我有这个家庭作业问题:

Write a function in C++ to count the presence of a word 'do' in a text file.

我尝试过的:

我尝试先在文本文件中搜索单词“d”,然后搜索“o”(如果紧接着出现)它。

#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.count单词'do'独立存在

2.count 单词 'do' 出现在文本中的任何位置。

这是一个数据文件处理问题。

算法遵循您所拥有的。像这样构造你的 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,这样在循环之后,您只需检查下一个字符是否为 o

备注

  • 在打字方面,ch的类型应该是char ch

已解释

  • while(!fin.eof())
    • 重复接下来的几行,直到我们到达文件末尾
  • do {
    • do-while 循环的开始
  • fin.get(ch);
    • 从文件中读取单个字节(字符)
  • found = found || ch == 'd';
    • 如果我们已经找到 d 或当前字符是 d
    • ,则将 found 设置为真
  • } while (ch == 'd' && fin);
    • do-while 结束。重复循环直到读取的最后一个字符不是 d 或者我们已经到达文件末尾
  • if (found && ch == 'o') {
    • 如果我们能够满足将 found 设置为 true 的条件并且我们读取的最后一个字符是 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!
        }
    }
}