C++ 在指定字符处拆分字符串并将其存储在向量中

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

我正在处理我自己的字符串类,这个“split”函数有问题。其思想是传递一个字符,函数查找该字符,在其每个实例上拆分字符串,然后将结果字符串存储到向量中。例如单词树的split('r')将返回一个包含“t”和“ee”的向量。以下是我的功能:

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
类是否具有正确的复制行为?例如,您是否实施了“三个规则”或使用了智能指针/类似容器的向量?使用terminal
0
length()
方法很麻烦,但我认为没有其他错误。除非你给我们一个答案,否则我认为我们无法帮助你。根据你的
substr
的工作方式((开始,长度)或(开始,结束)?),我几乎可以肯定@SteveJessop的想法是正确的。这意味着您应该编写
end
而不是
end-1
以及
length()
而不是
length()-1
。和
length()
可以替换为
i
,因为
i
“指向”末端的终止零。