初学者到C ++并在此编程
我想编写一个计算文件中单词数量的程序。 我只用一个文件测试它,但它应该适用于具有不同格式的其他文件,即。多个空间。 (我假设现在文件打开等没有问题)
这是我的代码:
#include <iostream> // these are the only imports I can use
#include <fstream>
#include <string>
using namespace std;
ifstream fin("story.txt"); // open the file called filename
void skip_space(char c) {
cout << "skip_space()\n";
while (c == ' ' || c == '\n' || c == '\t') { // as long as char is space
c = fin.get(); // get next character from file
if (fin.eof()) { // if eof is raised
return;
}
} // while
return;
}
void skip_char(char c) {
cout << "skip_char()\n";
while (c != ' ' || c != '\n' || c != '\t') { // as long as char is not space
c = fin.get(); // get next character from file
if (fin.eof()) { // if eof is raised
return;
}
}
return;
}
void num_words() {
cout << "num_words()\n";
int word_count = 0;
char c = fin.get(); // get first character of file
while (!fin.eof()) { // while not end of file
if (c == ' ' || c == '\n' || c == '\t') {
skip_space(c); // loops until an nonblank character is reached
} else { // if not a blank
word_count++; // increment count
skip_char(c); // loops until a space is reached
}
}
cout << "story.txt" << " has " << word_count << " words\n";
// prints a message to cout indicating the number of words in filename.
// A word is defined as the string that an input stream (such as cin) returns when reading a string value.
}
int main() {
num_words();
}
以下是文件的内容:
One day
a green
a frog ate a
princess.
当我运行代码时,输出是
num_words()
skip_char()
story.txt has 1 words
问题是word_count是1而不是9.我总体上很困惑。任何帮助将不胜感激!
答案 0 :(得分:0)
如果您写while (c != ' ' || c != '\n' || c != '\t')
,那么无论c
的值是多少,都会始终满足此条件(因为对于任何c
,它肯定与{{1}不同或者与' '
)不同。
你可能意味着'\n'
。
进一步注意,当您使用C ++标记问题时,您可以使用while (! (c==' ' || c !== '\n' || c == '\t')) { ...
,它会自动跳过任何空白区域,并只计算此操作成功的频率。
答案 1 :(得分:0)
您的程序中有一个小的逻辑流程。问题出在你的skip_char函数中。 看看这一行:
cin >> aString
想想如果你是一个读取空格字符会发生什么。条件应该是:
while (c != ' ' || c != '\n' || c != '\t')
我强烈建议您理解为什么您的情况有问题,并且还要了解如何自行查找此类错误,例如,考虑您可以为代码添加哪种类型的打印以便找到此错误。另一个选择是尝试熟悉在您使用的系统中工作的调试器。