【发布时间】:2016-05-30 02:43:59
【问题描述】:
我的目标是从输入文件中读取并计算至少有 1 个小写字母和 1 个数字的行数。我已经解决了我剩下的代码,它计算了所有的小写字母、大写字母、数字、字符和单词都没有问题。我还从输入文件中读取并逐字反转行。我似乎无法弄清楚为什么当只有 7 个带有 1 个小写字母和 1 个数字的代码时,为什么要计算 8 行代码。在对所有其他循环使用 getline() 时,我没有遇到任何问题。我不是专门找人为我编写代码。如果可能的话,我想解释一下为什么会发生这种情况?
我的输入文件包含:
This is a test file for hw3
How many Uppercase letters are in this f1le?
How many Lowercase letters are in this F1le?
H0W mAnY dIg1ts ar3 1N in this FILe?
Turn the 1npU7 N4m3 int0 its reverse
reverse the Lines to their opp05173 coutnerpart
find tOTal NumbEr of characTer5 in F1le
THIS IS A TEST LINE
我这部分的代码是:
inFile.clear();
inFile.seekg(0, inFile.beg);
while(getline(inFile, line)){
wordInput.str(line);
wordInput.clear();
wordInput.seekg(0);
while(wordInput.get(c)){
if(islower(c)){
lowerCase++;
}
else if(isdigit(c)){
digit++;
}
}
if(lowerCase >= 1 && digit >= 1){
lineCount++;
}
}
cout << lineCount << endl;
return 0;
}
我已将所有 int 变量初始化为 0 和顶部,并且还声明了我的 sstream 变量。我的库包括 <sstream> <fstream> <string> <iostream> 和 <algorithm>(用于早期部分。
我得到的输出是
8
什么时候应该是 7。最后一行不应该被计算在内,因为它没有小写字母和数字。我在想第一行被第二次阅读然后停止。我正在学习 C++ 课程,但尚未学习如何使用调试器。提前谢谢你。
【问题讨论】:
-
在循环的开始,在你读完这行之后,打印出
digit和lowerCase:你会发现它们没有被重置为0,所以基本上它们总是>=1,即使行上没有数字。 -
啊,我明白了。这是完全有道理的。我需要重置循环中的值。那工作得很好。非常感谢。我真的绞尽脑汁。
标签: c++ loops getline stringstream counting