1

我的输入文件由 2 行组成,其中的数字用空格分隔。我必须从两行中读取数字并将它们存储在 2 个不同std::vector的 s 中。但我不知道每行有多少个数字。如何确保在阅读第一行时我也不会开始阅读第二行的数字?我尝试将它们作为字符串读取并检查“ \n”字符,但它不起作用....

    cin>>str;
    while(str[0]!='\n' && str!="") {
        sscanf(str.c_str(),"%d",&num); 
        numz.push_back(num); //numz is the vector for the first line of numbers
        cin>>str;
    }

有没有一些巧妙的方法可以做到这一点?

4

2 回答 2

3

#include <sstream>访问std::istringstream.
那么代码应该是这样的:

std::string line1;
std::string line2;

std::getline(std::cin, line1);
std::getline(std::cin, line2);

int x;
std::vector<int> v;
std::istringstream iss(line1);
while (iss >> x) {
    v.push_back(x);
}

首先,我们使用 读取这两行代码getline,然后创建一个istringstream对象,它的工作方式与之前一样std::cin

于 2013-06-18T21:51:47.417 回答
3

下面将一行读入向量。当然,您应该添加错误检查。

std::vector<int> readnumline(std::istream& is)
{
  std::string line;
  std::getline(is, line);
  std::istringstream iss(line);
  int num;
  std::vector<int> result;
  while(iss >> num)
    result.push_back(num);
  return result;
}

要读取两个向量,您可以使用

std::vector<int> v1(readnumline(std::cin));
std::vector<int> v2(readnumline(std::cin));
于 2013-06-18T21:58:01.420 回答