【问题标题】:C++ Recursive Boolean Palindrome(string s)C++ 递归布尔回文(字符串 s)
【发布时间】:2017-08-20 21:39:15
【问题描述】:

对于计算机科学课,我们正在学习递归函数,我个人不喜欢,但我们需要使用它。以下代码用于检查字符串输入 '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);
}
}

运行它并输入一个字符串后,我得到一个运行时错误“std::out_of_range”,我不确定我在哪里搞砸了。总的来说,我对递归函数和 c++ 很陌生,所以任何帮助都会很棒。

如果需要我未提供的任何其他信息,请告诉我。

*注意:我们需要使用布尔函数,并且只能调用我们输入到函数中的字符串。

【问题讨论】:

  • 这与递归无关。 last = s.at(len);:如果 s 有 5 个字符,则 len 是 5,但是,s.at(5) 当然会骂你,因为它不存在。递归是最少的问题。您需要正确掌握一些基于 0 的数组索引的基础知识。
  • 记住这一点:有错误需要阅读。您的错误包含发生此错误的行,如果没有,请使用将显示此错误的调​​试工具运行。当您尝试访问不存在的数组/字符串中的位置(小于零或大于大小)时,会引发超出范围错误。手动处理你的代码,一步一步,然后你可能会发现错误。
  • “我们正在进入递归函数,我个人不喜欢”有些情况如果没有递归函数几乎是不可能解决的
  • 除了@EliasSoares 所说的:据我所知——所有递归算法都可以重写为迭代算法,但在某些情况下,递归算法更直观。

标签: c++ function recursion boolean palindrome


【解决方案1】:

last = s.at(len);

应该是

last = s.at(len-1);

【讨论】:

    【解决方案2】:

    如果字符串的长度为len,则其中字符的位置将为0..len-1,这就是last = s.at(len) 导致您遇到错误的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-17
      • 2013-06-13
      • 2016-07-04
      • 2017-10-28
      • 1970-01-01
      • 1970-01-01
      • 2015-02-07
      • 2020-09-07
      相关资源
      最近更新 更多