我正在尝试使用矢量创建一个2D数组。我有一个文件,每行有一组数字。所以我做了什么我实现了一个split函数,每当我有一个新的数字(由\t
分隔)时,它会将其拆分并将其添加到向量
vector<double> &split(const string &s, char delim, vector<double> &elems) {
stringstream ss(s);
string item;
while (getline(ss, item, delim)) {
cout << item << endl;
double number = atof(item.c_str());
cout << number;
elems.push_back(number);
}
return elems;
}
vector<double> split(const string &s, char delim) {
vector<double> elems;
split(s, delim, elems);
return elems;
}
之后我简单地遍历它。
int main()
{
ifstream file("./data/file.txt");
string row;
vector< vector<double> > matrix;
int line_count = -1;
while (getline(file, row)) {
line_count++;
if (line_count <= 4) continue;
vector<double> cols = split(row, '\t');
matrix.push_back(cols);
}
...
}
现在我的问题就在这里:
while (getline(ss, item, delim)) {
cout << item << endl;
double number = atof(item.c_str());
cout << number;
其中item.c_str()转换为0.这不应该是一个与item具有相同值的字符串吗?如果我直接从字符串到c_string,它可以在一个单独的示例上工作,但是当我使用此getline时,我最终会遇到此错误情况,
提示?
答案 0 :(得分:1)
而不是使用atof使用stringstream
while(!ss.eof())
{
double number;
ss>>number;
}
编辑: 我已经更新了你的分割功能并删除了多余的回报。
void split(const string &s, vector<double> &elems) {
stringstream ss(s);
while (!ss.eof()) {
double number;
ss >> number;
cout << number;
elems.push_back(number);
}
}
int main()
{
std::vector<double> columns;
split("1.32\t1.65\t1.98456\t2.34",columns);
return 0;
}