以下代码是我在 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
。
所以你最好使用 string
的 vector
。正如所指出的,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/