您好我尝试做一个可以分割我想要的每个文本的函数。例如,如果我输入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;
}
答案 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::vector
,push_back
片段会更容易,并完全取消new
。可能也同样有效,因为返回的矢量将由于RVO而被移动或构建到位。
无论如何,您当然必须将返回值分配给main中的变量。现在你只需调用split并丢弃该值,泄漏Split
中分配的内存。