【发布时间】:2018-12-11 15:47:00
【问题描述】:
以下代码是我在 C++98 中的项目的一部分,因此我不允许使用向量等。现在这个函数的主要用途是使用给定的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;
}
【问题讨论】:
-
C++98 有向量。
-
nums是指向数组中第一个元素的指针。调试器不知道它包含多少个元素,只能安全地假设它有 1 个。 -
您的逻辑在这里看起来有缺陷...您的内部循环循环遍历整个字符串并将其很好地拆分,但是您将每个块放入数组的同一索引中。然后你增加你将要放入的索引并循环整个字符串再做一遍。
-
我不明白外环的原因,也不知道你是怎么知道大小的。
-
你的前提是错误的。使用
std::vector,虽然这可能无法解决您的代码的所有问题