问题描述
Barr,3145,7
Rab,12,5513,1412,221,232,179,7121231
Bean,1,1231,219,21,337,9239,312,764,640391,4,7966346,22278,5,116364,56350
Earl,132,230,121,32,425,67
Donut,112,5525,23121,2123,65432,8790,3,4567,444
我希望每行都存储在2D向量(vector<vector<string>>)
中,且不带逗号。
我尝试做:
while(getline(filestream,line)){
stringstream linestream(line);
while(getline(linestream,anotherLine,','){
oneDvector.push_back(anotherLine);
}
twoDvector.push_back(oneDvector);
oneDvector.clear();
}
但这似乎不起作用。我该怎么办?
解决方法
恕我直言,您不想使用2D向量或数组。您需要一个std::vector
的课程:
struct Record
{
std::string text;
std::vector<int> data;
friend std::istream& operator>>(std::istream& input,Record& r);
};
std::istream& operator>>(std::istream& input,Record& r)
{
std::string text_line;
std::getline(input,text_line);
std::istringstream text_stream(text_line);
std::getline(text_stream,r.text,',');
int value;
char comma;
while (text_stream >> value)
{
r.data.push_back(value);
text_stream >> comma;
}
return input;
}
注意:在上面的输入函数中,一条记录逐行读入一个字符串。这将使数字的读取更加容易。
您输入的循环看起来像:
Record r;
std::vector<Record> database;
while (file_stream >> r)
{
database.push_back(r);
}
通常根据输入记录对结构进行建模可以使程序更好。易于开发和调试。
可以通过用空格替换第二个出现的和剩余的逗号来简化输入。第一个逗号用于结束文本字段。