微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C ++表示回文

如何解决C ++表示回文

我对使用C ++进行编码非常陌生,需要您的帮助。在下面的代码中,我想检查Parlindrome并显示相反的文本。因此,如果我运行此代码,它会显示正确的反向词,但是如果检查了parlindrome,则不要将它们返回true。

控制台显示: 女士0 ada0 ecalevol0

为什么返回值总是为0?

感谢您的帮助!

#include <iostream>

// Define is_palindrome() here:

bool is_palindrome(std::string text) {
  std::string text_reversed;

  for(int i = text.length(); i >= 0; i-- ) {
    text_reversed += text[i];
    std::cout << text[i];
  }

  if (text_reversed == text) {
    return true;
  } else {
    return false;
  }
}

int main() {
  
  std::cout << is_palindrome("madam") << "\n";
  std::cout << is_palindrome("ada") << "\n";
  std::cout << is_palindrome("lovelace") << "\n";
}

解决方法

您的i始于text.length(),而不是text.length() - 1

因此,您的第一个text[i]是一个空字节(是的,即使对于std::string,也可以保证)。

因此text_reversed的第一个字符是text中不存在的“隐藏”字符,并且两个字符将永远不匹配。

,
std::string reversed_string(const std::string& s)
{
    return {s.rbegin(),s.rend()};
}

bool is_palindrome(const std::string& s)
{
    return std::equal(s.begin(),s.begin() + s.size() / 2,s.rbegin());
}

std::equal的文档中有is_palindrome的示例

,

您遇到的最大问题是i>=0text[i]。应该是i>0text[i-1]

请简化该return语句。

#include <iostream>

bool is_palindrome(std::string text) {

  std::string text_reversed = "";

  for(int i = text.length(); i > 0; i-- ) {
    text_reversed += text[i-1];
  }
  std::cout << text_reversed <<std::endl;
  std::cout << text <<std::endl;

  return text == text_reversed;
}

int main() {
  std::cout << is_palindrome("madam") << std::endl;
  std::cout << std::endl;
  std::cout << is_palindrome("ada") << std::endl;
  std::cout << std::endl;
  std::cout << is_palindrome("lovelace") << std::endl;
  std::cout << std::endl;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。