【发布时间】:2018-05-08 12:41:57
【问题描述】:
问题是删除相邻的相同字母对,直到没有这样的对。我为此使用了递归。但是代码给出了分段错误。这个递归有什么问题?
#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";
}
【问题讨论】:
-
请考虑您正在取消引用 i 和 i+1。为简单起见,如果字符串中只有一个字符怎么办?
-
仅供参考:当你让它工作时,你可能想改变
if(s.length()<0) cout<<s; -
请注意,在
s.erase(s.begin() + i)之后,曾经为s.begin() + i + 1的字符现在位于s.begin() + i。 -
当我切换for循环的顺序时发生了同样的事情
-
为什么你既循环又递归?
标签: c++ recursion segmentation-fault