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

Data File Handling - find count of word in file

本文关键字:文件 查找 处理 数据      更新时间:2023-10-16

我有一个家庭作业问题:

用C++编写一个函数,计算文本文件中单词">do"的存在。

我尝试过的内容:

我试着首先在文本文件中搜索单词">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.计算独立存在的单词do。

2.计算文本中出现的单词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设置为true
  • } while (ch == 'd' && fin);
    • do-while结束。重复循环,直到读取的最后一个字符不是d,或者到达文件末尾
  • if (found && ch == 'o') {
    • 如果我们能够满足将found设置为true的条件,并且我们读取的最后一个字符是o
  • // boom goes the dynamite
    • 那么我们已经成功地找到了单词do

Sansstd::ios::eof

我下一步不会对此进行解释,但它将与我已经发布的内容密切相关。这里的目标是保护自己不读取已经空的文件。

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