我在尝试计算 vector 中的单词时遇到问题。 vector 将文件中的每一行都保存为一个对象。 v[0] 是第一行,v[1] 是第二行,依此类推。
对于我的 countWords() 函数,它仅适用于计数 v[0]。任何过去被忽略或错过的对象。有任何想法吗?提前致谢。
#include <cstdlib>
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
int countWords(vector<string> v)
{
stringstream ss;
string word;
int count = 0;
for(int i = 0; i < v.size(); i++) {
ss.str(v[i]);
while (ss >> word)
count++;
}
return count;
}
void readFile(string filename,vector<string> &v)
{
fstream file;
string line;
file.open(filename,ios::in);
while(getline(file,line)) { //Reads the file line by line ...
if(line == "") //... ignoring any empty lines ...
continue;
v.push_back(line); //... and puts them into our vector.
}
file.close();
}
int main(int argc,char* argv[])
{
if (argc != 2) { //Terminate unless the user enters -ONE- entry.
cout << "Usage: " << argv[0] << " <filename>" << endl;
exit(1);
}
string filename = argv[1];
vector<string> fileContents;
readFile(filename,fileContents);
cout << countWords(fileContents) << endl;
}
最佳答案
作为 RichieHindle 答案的替代方案,这也有效。只需将字符串流作用域放在 for 循环的本地,它就会正确重置。
int countWords(vector<string> v)
{
string word;
int count = 0;
for(int i = 0; i < v.size(); i++) {
stringstream ss(v[i]);
while (ss >> word)
count++;
}
return count;
}
关于C++:计数函数只计算第一行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17092817/