gpt4 book ai didi

c++ - 为什么 String* 不返回所有字符串?

转载 作者:行者123 更新时间:2023-11-30 04:54:01 25 4
gpt4 key购买 nike

以下代码是我在 C++98 中的项目的一部分,因此我不允许使用 vector 等。现在此函数的主要用途是使用给定的 delimeter 将单个字符串行分解为字符串数组,size 基本上是单词的数量我需要回来。问题是,当我在最后调试和检查 nums 时,它将大小更改为 4,并且只返回第一个单词,由它的每个字符填充。好像,nums 现在是 char* 我已经多次更改代码,但我不知道哪里出错了,有什么建议吗?

string* Split(string ss,char delimeter,int size)
{
string *nums=new string[size];
int index_c, index_sw=0;
for (int i = 0; i < size; i++)
{
for(unsigned int j=0;j<ss.length();j++)
{
if (ss.at(j) == delimeter)
{
index_c = j;
nums[i] = ss.substr(index_sw, index_c);
index_sw += index_c;
i++;
}
}
break;
}
return nums;
}

最佳答案

由于事先不知道string ss中的单词数,因此调用Split函数时不能指定size。不知道 size,您将无法将内存分配给 nums

所以你最好使用 stringvector。正如所指出的,vector 在 C++98 中可用。

那么您修改后的 Split 函数将如下所示:

vector<string> Split(string ss, char delimiter)
{
vector<string> vs;
int index_c, index_sw=0, j;

for(j=0;j<ss.length();j++)
{
if (ss.at(j) == delimiter)
{
index_c = j;
vs.push_back(ss.substr(index_sw, index_c - index_sw));
index_sw = index_c + 1;
}
}
vs.push_back(ss.substr(index_sw, j - index_sw));
return vs;
}

然后可以这样调用:

vector<string> ret = Split("This is a stackoverflow answer", ' ');

查看演示 here .

关于c++ - 为什么 String* 不返回所有字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53727680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com