【问题标题】:Data File Handling - find count of word in file数据文件处理 - 查找文件中的字数
【发布时间】:2017-05-26 12:46:34
【问题描述】:

我有这个作业问题:

用 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”这个词。

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

【问题讨论】:

  • 你为什么不发布一些代码,该死的嘟嘟?
  • 用你的代码提问(你必须有)在这里总是一件好事。
  • 好的,我会编辑它
  • 使用std::getline逐行读取文件,并使用std::string::find?甚至更好:逐字读取文件 (inFile &gt;&gt; str;),并计算单词的出现次数。
  • 你不能说两者,它们有不同的算法。或者您是在告诉我们您甚至没有尝试理解您的家庭作业并浪费我们的时间?

标签: c++ c++11 data-files


【解决方案1】:

算法遵循你所拥有的。像这样构造你的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' &amp;&amp; fin);
    • do-while 结束。重复循环,直到读取的最后一个字符不是d,或者我们已经到达文件末尾
  • if (found &amp;&amp; ch == 'o') {
    • 如果我们能够满足将found 设置为true 的条件并且我们读取的最后一个字符是o...
  • // boom goes the dynamite
    • 那么我们就成功找到了do这个词

Sans std::ios::eof

接下来我不会解释这一点,但它会与我已经发布的内容密切相关。这里的目标是保护自己不读取已经为空的文件。

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

【讨论】:

  • 非常感谢,但我还是个孩子(17 岁),看不懂代码。
  • @PushkarSoni Age 与此无关。我 17 岁的时候在 SO 上发帖,但我知道一个好问题和乞求给你一些东西之间的区别。
  • @PushkarSoni 代码解释
  • 如果你要建议如何读取文件,你不妨做正确,见Why is iostream::eof inside a loop condition considered wrong?
  • 实际上我想计算文件中的'do's。
猜你喜欢
  • 1970-01-01
  • 2014-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-10
  • 2013-07-01
相关资源
最近更新 更多