use*_*774 2 c++ file count stream
我正在尝试计算文件中的单词数量,我知道这个问题已经被问过,但我已经尝试了一些我见过的实现,但是我一直收到错误.
我正在阅读的文件中的行是"Super Chill",但是当我运行代码时,我得到一个计数3,其中>>第一次获得Super,然后两次获得Chill.关于这种方法,我有几个问题:
1)While(in)寻找什么?怎么知道什么时候停止?
2)为什么"寒意"用>>存储两次?
这是代码
int countWords(std::istream& in){ // line in file is -> Super Chill
int count = 0;
std::string word;
while (in) {
in >> word;
if (word != "") {
count+= 1;
}
}
return count;
}
Run Code Online (Sandbox Code Playgroud)
while (in)检查是否没有发生错误.这和写作一样while (!in.fail())
在你打电话in >> word并获得第一个"寒意"后,while (in)仍然是真的,直到下一次打电话给in >> word.当你in >> word再次点击它失败,因为它在文件的末尾并且没有写任何内容word,但是word变量在上一次仍然有"Chill",所以你再次计算它.然后while (in)在下一次迭代时最终失败.
调用while (in >> word) { ++count; }工作因为in >> word实际上是in.operator>>(word)碰巧返回的函数istream&,并且istream有一个operator bool方法允许你在一个条件而不是写条件中使用它!in.fail().我知道,有点环形交叉路口.点是,它调用in >> word,然后检查if (in),如果它通过,然后调用++count;并再次迭代.与您的原始技术相比,word即使in >> word失败也会计算之前的技术.
为了使这一点更清楚,可能有助于知道将原始代码的if语句更改为if (in)也可以工作,但是会有一些不好的代码.
作为最后的结论,整个函数可以写成:
int countWords(std::istream& in) {
int count = 0;
for (std::string word; in >> word; ++count) {}
return count;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4219 次 |
| 最近记录: |