如何将逗号分隔值传递给多维数组?

时间:2015-03-31 19:27:37

标签: c++ arrays multidimensional-array

提供的文本文件具有未确定的行数,每行包含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类型? 谢谢(:

2 个答案:

答案 0 :(得分:0)

有很多方法可以解决这个问题。就个人而言,我会实现一个链表来保存从自己的内存缓冲区中读出的每一行。读完整个文件后,我会知道文件中有多少行,并使用strtokstrtod处理列表中的每一行来转换值。

这里有一些 伪代码 让你滚动:

// 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

祝你好运并希望这有助于:)