首页 > 解决方案 > C++ 递归函数中的分段错误

问题描述

问题是删除相邻的一对相同的字母,直到没有这样的对。我为此使用了递归。但是代码给出了分段错误。这个递归有什么问题?

#include<iostream>
#include<string>
using namespace std;
string super(string s)
{
        for(int i=0;i<s.length();i++)
        {
                if(s[i]==s[i+1])
                {
                        s.erase(s.begin()+i);
                        s.erase(s.begin()+i+1);
                        s=super(s);
                        cout<<s;
                        break;
                }
                if(i+1==s.length())
                        return s;
        }
        return s;
}
int main()
{
        string s;
        cin>>s;
        s=super(s);
        if(s.length()<0)
                cout<<s;
        else
                cout<<"Empty String";
}

标签: c++recursionsegmentation-fault

解决方案


您的条件检查是无序的s[s.length()],根据定义,会导致分段错误,因此您需要在尝试访问它之前确保i+1它小于 s 的长度。

现在你正在访问s[i+1],然后检查是否i+1 < s.length()


推荐阅读