c++ - 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";
}
解决方案
您的条件检查是无序的s[s.length()]
,根据定义,会导致分段错误,因此您需要在尝试访问它之前确保i+1
它小于 s 的长度。
现在你正在访问s[i+1]
,然后检查是否i+1 < s.length()
。
推荐阅读
- excel - 绝对选择表 A 列中的第一个空单元格
- c# - 如何用更少的行改进我的方法?
- sql - (3504) 尝试在 teradata 中生成总和时出错?
- javascript - Overlay 小于 React Native 中的父样式组件
- java - 使用迭代器删除并插入 LinkedHashMap?
- azure - 如何检查 Azure Blob Storage V12 中是否存在容器
- python - python的并发异步问题
- javascript - Bootstrap 4:当上面的部分关闭时关闭打开部分
- c++ - 按住键直到事件 C++
- python - 如何读取在记录的实际 JSON 字典部分之前具有整数值的数据文件?