我的输入文件由2行组成,这些行的数字用空格分隔。我必须从两行读取数字并将它们存储在2个不同的std::vector
中。但我不知道每行有多少个数字。如何确保在阅读第一行时我还没有开始读取第二行的数字?我尝试将它们作为字符串读取并检查“\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;
}
有一些巧妙的方法吗?
答案 0 :(得分: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
一样。
答案 1 :(得分: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));