C++ 打印返回指针的函数数组
你好,我尝试做一个函数,可以分割我想要的每一个文本。例如,如果我输入apple::google::dsf,定界符是::,那么每个元素都将放在数组中的一个位置。我成功地做到了这一点,但现在我希望能够在我的主应用程序中使用此阵列。因此,我想打印在main函数中返回的数组,而不是打印函数Split()中的数组。所以我的问题是如何做到这一点? 这是我的代码:C++ 打印返回指针的函数数组,c++,arrays,pointers,C++,Arrays,Pointers,你好,我尝试做一个函数,可以分割我想要的每一个文本。例如,如果我输入apple::google::dsf,定界符是::,那么每个元素都将放在数组中的一个位置。我成功地做到了这一点,但现在我希望能够在我的主应用程序中使用此阵列。因此,我想打印在main函数中返回的数组,而不是打印函数Split()中的数组。所以我的问题是如何做到这一点? 这是我的代码: int main() { string buffer; string delimitor = "::"; unsigned int
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;
}
intmain()
{
字符串缓冲区;字符串分隔符=“::”;
无符号int参数=0;
cout>param;
缓冲液;
拆分(缓冲区、定界器、参数);
系统(“暂停”);
返回0;
}
字符串*拆分(字符串缓冲区、字符串定界符、无符号整数nbr_参数)
{
字符串*arr=新字符串[nbr_参数];
unsigned int start=0,end=buffer.find(定界符),count=0;
while(end!=string::npos)
{
arr[count]=buffer.substr(start,end-start);
开始=结束+定界符.length();
end=buffer.find(定界器,开始);
计数++;
}
if(end==string::npos)
{
arr[count]=buffer.substr(开始、结束);
}
返回arr;
}
将返回值存储在变量中,然后对其进行迭代
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::string*words=Split(缓冲区、定界器、参数);
对于(std::size_t i=0;i!=param;++i){
std::cout使用std::vector
,推回
片段并完全删除新的。可能同样有效,因为返回的向量会由于RVO而移动或构建到位
无论如何,您当然必须将返回值分配给main中的一个变量。现在您只需调用split并放弃该值,就会泄漏在split
中分配的内存,最好返回std::vector
,而不是原始指针。
const auto& words = Split(buffer, delimitor); // param is no longer needed.
for (const auto& word : words) {
std::cout << words[i] << std::endl;
}