返回一个多维数组

时间:2014-03-06 18:11:14

标签: c++ arrays pointers multidimensional-array

string THIRDSTEP::DispSched(string movie)
{
    string data[6][7];
    ifstream file("C:\\Users\\User\\Desktop\\MP 116\\sched1.csv");

    for (int row = 0; row < 7; row++)
    {
        string line;
        getline(file, line);
        if (!file.good())
        break;

        stringstream iss(line);

        for (int col = 0; col < 6; col++)
        {
            string val;
            getline(iss, val, ',');
            if (!iss.good())
                break;

            stringstream converter(val);
            converter >> data[row][col];
        }
    }
    return 0;
}

此代码应返回多维数组。但我不知道怎么做。有任何想法吗?我认为应该使用指针,但是如何使用?

2 个答案:

答案 0 :(得分:0)

您需要返回data的引用或指针(即return &data)。

但是,只要函数返回,data就会超出范围,因此仅此一项就没用了。您需要做的是字符串数组传递给该函数并让它进行编辑,或者使用newdelete明确控制数据的生命周期。

我会说在函数外部创建数据并在这种情况下传递对它的引用最好。

更改最少的示例

void THIRDSTEP::DispSched(string movie, string (&output)[6][7])
{
    ifstream file("C:\\Users\\User\\Desktop\\MP 116\\sched1.csv");

    for (int row = 0; row < 6; row++)
    {
        string line;
        getline(file, line);
        if (!file.good())
        break;

        stringstream iss(line);

        for (int col = 0; col < 7; col++)
        {
            string val;
            getline(iss, val, ',');
            if (!iss.good())
                break;

            stringstream converter(val);
            converter >> output[row][col];
        }
    }
}

在旁注中,您希望避免在循环中使用像7和6这样的幻数。尝试创建std :: vector的std :: vector并使用它的迭代器来查找结尾而不是硬编码它的大小。

答案 1 :(得分:0)

一种可能的解决方案:

struct MyStrings
{
    string s[6][7];
};

MyStrings THIRDSTEP::DispSched(string movie)
{
     MyStrings strings;
     strings.s[2][3] = movie;
     return strings;
}