c++ - 为什么 String* 不返回所有字符串?
问题描述
以下代码是我在 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;
}
解决方案
由于事先不知道字数,string ss
因此无法size
在调用Split
函数时指定。不知道size
您将无法将内存分配给nums
.
所以你最好使用 a vector
of string
s。正如所指出的,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", ' ');
在此处查看演示。
推荐阅读
- python - IBM Data Science:float() 参数必须是字符串或数字,而不是“方法”
- html - HTML 表单方法 POST 更改为 GET 但很少,并且仅在单击的链接上
- python - 是否可以将数据存储在一个键中,一个字典中的另一个键中?
- javascript - 将参数传递给 addEventListener 调用?
- python - 如何在 Tensorflow 中为 VGG16 获取梯度
- java - Java 中带有 cachedHostConnectionPool 的 Source.queue
- reactjs - 生产中的反应应用程序 - 直接请求时链接不起作用,它们仅在反应路由器访问时才起作用
- asynchronous - 您可以从预先生成的数据集中向表异步添加行吗?
- c# - 用于包含特殊字符的正则表达式
- mongodb - 在 Kubernetes 中无法访问服务