如何解决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>=0
和text[i]
。应该是i>0
和text[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 举报,一经查实,本站将立刻删除。