对于计算机科学课,我们正在进入递归函数,我个人不喜欢,但我们需要使用它。以下代码旨在检查字符串是否输入' s'是回文。
bool palindrome(string s)
{
int len = s.length();
char start = s.at(0);
char last = s.at(0);
if(len>1)
{
last = s.at(len);
}
if(start == last && len<=2)
{
return true;
}
else if(start != last)
{
return false;
}
else
{
s = s.substr(1, s.size() - 2);
return palindrome(s);
}
}
运行此命令并输入字符串后,我收到运行时错误&#39; std :: out_of_range&#39;,我不知道我搞砸了哪里。我对递归函数和c ++很新,所以任何帮助都会很棒。
如果我需要提供任何其他信息,请告诉我。
*注意:我们需要使用bool函数,并且只能调用我们输入函数的字符串。
答案 0 :(得分:0)
如果字符串的长度为len
,则其中字符的位置将为0..len-1,这就是last = s.at(len)
导致您获得错误的原因。
答案 1 :(得分:0)
last = s.at(len);
应该是
last = s.at(len-1);