C++ 在指定字符处拆分字符串并将其存储在向量中
我正在处理我自己的字符串类,这个“split”函数有问题。其思想是传递一个字符,函数查找该字符,在其每个实例上拆分字符串,然后将结果字符串存储到向量中。例如单词树的split('r')将返回一个包含“t”和“ee”的向量。以下是我的功能:C++ 在指定字符处拆分字符串并将其存储在向量中,c++,string,vector,split,C++,String,Vector,Split,我正在处理我自己的字符串类,这个“split”函数有问题。其思想是传递一个字符,函数查找该字符,在其每个实例上拆分字符串,然后将结果字符串存储到向量中。例如单词树的split('r')将返回一个包含“t”和“ee”的向量。以下是我的功能: std::vector<String> String::split(char c) const{ std::vector<String> result; int start = 0, end; int i = 0
std::vector<String> String::split(char c) const{
std::vector<String> result;
int start = 0, end;
int i = 0;
while(ptr[i] != 0) {
if(ptr[i] == c) {
end = i;
result.push_back(substr(start, end - 1));
start = end + 1;
}
++i;
}
result.push_back(substr(start, length() - 1));
return result;
}
std::vector String::split(char c)const{
std::向量结果;
int start=0,结束;
int i=0;
while(ptr[i]!=0){
if(ptr[i]==c){
end=i;
结果:推回(substr(开始,结束-1));
开始=结束+1;
}
++一,;
}
结果。推回(substr(开始,长度()-1));
返回结果;
}
每次我运行这个,它都会给我一个严重的错误。有什么想法吗
编辑1:My substr()采用开始和结束位置,与std::string substr()不同。您的
substr()函数是什么样子的std::string::substr()
将位置和长度作为参数,但传递的是起始和结束位置。首先,如果字符串中的第一个字符等于c
,则调用substr(0,-1)
。我怀疑这是否会顺利进行,在没有看到您的代码的情况下,我猜测它将尝试分配2GB。您的String
类是否具有正确的复制行为?例如,您是否实施了“三个规则”或使用了智能指针/类似容器的向量?使用terminal0
和length()
方法很麻烦,但我认为没有其他错误。除非你给我们一个答案,否则我认为我们无法帮助你。根据你的substr
的工作方式((开始,长度)或(开始,结束)?),我几乎可以肯定@SteveJessop的想法是正确的。这意味着您应该编写end
而不是end-1
以及length()
而不是length()-1
。和length()
可以替换为i
,因为i
“指向”末端的终止零。