0

我有一个文件是这样的:

98
287 2352
987 4313 3253
235 34325 432 123

基本上我想重现这个文件。我正在尝试一次导入一行,提取数字并将它们推入向量中。每个向量都被推入一个更大的向量中。

int main(int argc, char* argv[])
{
    int sum = 0, one = 0, two = 1;
    std::string line, number;
    std::vector<int> vec;
    std::vector<std::vector<int>> bigvec;
    auto k = vec.begin();
    std::ifstream in(argv[1]);
    while(in >> line) {
        std::istringstream is(line);
        while(is >> number) {
            vec.push_back(stoi(number));
        }
        bigvec.push_back(vec);
        while(!vec.empty()) {
            vec.pop_back();
        }
        std::cout << std::endl;
    }
    return 0;
}

但是,当我打印结果时,我的代码似乎将每个数字放在它自己的向量中,而不是复制文件。

所以我的输出是

98
287
2352
etc.

好像这条线

while(is >> number) {
    vec.push_back(stoi(number));
}

压入一个数字,然后退出循环。

我哪里错了?

4

2 回答 2

4

你的问题出在这里:

while(in >> line)

C++ 默认读取直到遇到间隔或换行。在您的情况下,它在换行之前遇到间隔。如果你想采取整条线采取:

getline(cin, line);
于 2013-09-09T20:09:12.457 回答
4

while(in >> line)从输入中读取下一个单词。getline(in, line)如果您想阅读整,请使用。

您可以将多种优化添加到代码中。例如,stoi您可以从输入流中读取一个整数,而不是使用您已读取的字符串。此外,您可以简单地调用clear.

于 2013-09-09T20:09:54.973 回答