提供的文本文件具有未确定的行数,每行包含3个以逗号分隔的双精度数。例如:
-0.30895,0.35076,-0.88403
-0.38774,0.36936,-0.84453
-0.44076,0.34096,-0.83035
...
我想逐行从文件中读取这些数据,然后将其拆分为逗号(,)符号并将其保存在N×3数组中,我们称之为顶点[N] [3],其中N表示文件中未定义的行数。
到目前为止我的代码:
void display() {
string line;
ifstream myfile ("File.txt");
if (myfile.is_open())
{
while ( getline (myfile,line) )
{
// I think the I should do 2 for loops here to fill the array as expected
}
myfile.close();
}
else cout << "Unable to open file";
}
问题:我设法打开文件并逐行读取,但我不知道如何将值传递到请求的数组中。 谢谢。
修改: 我已经尝试根据收到的建议修改我的代码:
void display() {
string line;
ifstream classFile ("File.txt");
vector<string> classData;
if (classFile.is_open())
{
std::string line;
while(std::getline(classFile, line)) {
std::istringstream s(line);
std::string field;
while (getline(s, field,',')) {
classData.push_back(line);
}
}
classFile.close();
}
else cout << "Unable to open file";
}
这是正确的吗?以及如何访问我创建的矢量的每个字段? (例如在数组中)? 我也注意到这些是字符串类型,我怎么能将它们转换为float类型? 谢谢(:
答案 0 :(得分:0)
有很多方法可以解决这个问题。就个人而言,我会实现一个链表来保存从自己的内存缓冲区中读出的每一行。读完整个文件后,我会知道文件中有多少行,并使用strtok
和strtod
处理列表中的每一行来转换值。
这里有一些 伪代码 让你滚动:
// Read the lines from the file and store them in a list
while ( getline (myfile,line) )
{
ListObj.Add( line );
}
// Allocate memory for your two-dimensional array
float **Vertices = (float **)malloc( ListObj.Count() * 3 * sizeof(float) );
// Read each line from the list, convert its values to floats
// and store the values in your array
int i = j = 0;
while ( line = ListObj.Remove() )
{
sVal = strtok( line, ",\r\n" );
fVal = (float)strtod( sVal, &pStop );
Verticies[i][j++] = fVal;
sVal = strtok( sVal + strlen(sVal) + 1, ",\r\n" );
fVal = (float)strtod( sVal, &pStop );
Verticies[i][j++] = fVal;
sVal = strtok( sVal + strlen(sVal) + 1, ",\r\n" );
fVal = (float)strtod( sVal, &pStop );
Verticies[i][j] = fVal;
i++;
j = 0;
}
答案 1 :(得分:0)
编辑后的代码是正确的。您可以像访问普通c ++数组中的值一样访问c ++中的向量值。类似classdata[i]
您可以在此处找到更多信息。 Vector reference
关于将字符串转换为float的问题。在c ++中,您可以使用stof stof(-0.883)
直接执行此操作,您可以在此处再次查找引用string to float
祝你好运并希望这有助于:)