【发布时间】:2021-07-10 01:45:33
【问题描述】:
我正在尝试从文本文件中读取数据并将其存储到数组中。我需要它来解决 FEM 问题。假设我的文本文件如下:
node: 1,2,3,4,5,6,7,8,9,10
x: 4,4,3.75,3.76773151,3,3.59192947,4,3.5,3.55115372,3.375, 3.71330586
y: 3,275,3,2.65921885,2.79192947,2.5,3,2.55115372,2.78349365,2.36222989
z: 0,0,0,0,0,0,0,0,0,0
我想将此数据从文本文件存储到 10*4 矩阵 (myarray[10][4]) 中。我还需要将此数组的每一列存储到一个向量中。假设我的向量是:
double x[10];
double y[10];
double z[10];
for (int i = 0; i < 10; i++)
{
x[i] = myarray[i][1];
y[i] = myarray[i][2];
z[i] = myarray[i][3];
}
我这样写代码:
int main()
{
string line;
string coordinate[10][4];
ifstream mesh("mesh.txt");
for (int i = 0; i < 10; ++i)
{
for (int j = 0; j < 4; ++j)
{
if (getline(mesh, line, ';'))
{
coordinate[i][j] = line;
cout << coordinate[i][j] << endl;
cout << "mesh : " << line[0] << endl;
}
}
}
mesh.close();
}
现在我的问题是,当我想将每一列坐标放入一个向量时,我得到了这个错误:
不存在从字符串到双精度的合适转换函数
我不明白这个错误,需要帮助解决它。
【问题讨论】:
-
提示:如果可以,请使用
std::vector而不是 C 数组。push_back省去了很多麻烦。您还想使用std::tuple之类的东西来创建您的 x/y/z 坐标,或者甚至可以制作一个简单的struct point { double x,y,z; } -
提示:
x[i]=myarray[i][1]不会发生。您必须convert your string to adouble,如x[i] = std::stod(myarray[i][1])。 -
提醒:C++ 数组是零索引的。您正在跳过索引 0,并使用 1-3。
-
您好,感谢您的回答。您能否在代码中告诉我应该更改哪一部分?
-
为什么 x[i]=myarray[i][1] 不会发生?我是 C++ 新手,我不能将矩阵的一列放入向量中?