我在尝试计算 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/

10-16 04:16