打印返回指针的函数的数组

时间:2017-01-27 09:26:57

标签: c++ arrays pointers

您好我尝试做一个可以分割我想要的每个文本的函数。例如,如果我输入apple :: google :: dsf并且分隔符是::每个元素都将放在数组中的某个位置。我成功地做到了这一点,但现在我希望能够在我的主要部分中使用这个数组。所以我想打印我在main函数中返回的数组,而不是从函数Split()打印数组。所以我的问题是如何做到这一点? 这是我的代码:

int main()
{
    string buffer; string delimitor = "::";
    unsigned int param = 0;
    cout << "Please enter how many param: "; cin >> param;
    cout << "Please enter something in the buffer: "; cin >> buffer;
    Split(buffer, delimitor, param);

    system("PAUSE");
    return 0;
}

string* Split(string buffer, string delimitor, unsigned int nbr_param)
{
    string* arr = new string[nbr_param];
    unsigned int start = 0, end = buffer.find(delimitor), count = 0;
    while (end != string::npos)
    {
        arr[count] = buffer.substr(start, end - start);
        start = end + delimitor.length();
        end = buffer.find(delimitor, start);
        count++;
    }
    if (end == string::npos)
    {
        arr[count] = buffer.substr(start, end);
    }

    return arr;
}

2 个答案:

答案 0 :(得分:2)

将返回值存储在变量中,而不是迭代它。

std::string* words = Split(buffer, delimitor, param);
for (std::size_t i = 0; i != param; ++i) {
    std::cout << words[i] << std::endl;
}
delete[] words;

如果您返回std::vector<std::string>,则可以

const auto& words = Split(buffer, delimitor); // param is no longer needed.
for (const auto& word : words) {
    std::cout << words[i] << std::endl;
}

答案 1 :(得分:1)

使用std::vectorpush_back片段会更容易,并完全取消new。可能也同样有效,因为返回的矢量将由于RVO而被移动或构建到位。

无论如何,您当然必须将返回值分配给main中的变量。现在你只需调用split并丢弃该值,泄漏Split中分配的内存。