我正在尝试编写一个简单的 C++ 程序,让用户知道他们输入的单词是否为回文。示例:“妈妈”是回文。
这是我所拥有的:
#include <iostream>
#include <string>
using namespace std;
// Forward Declaration
string reversed_string(string);
int main(){
string str;
string reversed;
cout << "Enter string to check:\n";
getline(cin, str);
reversed = reversed_string(str);
if(str == reversed){
cout << str << " is palindrome\n\n";
}
else{
cout << "Not palindrome";
}
}
string reversed_string(string str){
string reversed;
for(int i = int(str.length()); i >= 0; i--){
reversed += str[i];
}
return reversed;
}
当我尝试输入一个回文词时,它总是转到我的主函数中的 else 语句。我做错了什么?
最佳答案
字符串的最后一个字符位于索引 len - 1
处, 不是 len
.根据标准 (C++11):
Returns
*(begin() + pos)
ifpos < size()
. Otherwise, returns a reference to an object of type charT with value charT(), where modifying the object leads to undefined behavior.
标准语的实际意思是,如果pos
不小于字符串长度,函数返回空字符引用。因此,您要放入 反转字符串中的第一个字符是 null。
但是,您实际上并不需要反转字符串来确定它是否是回文,简单地使用以下(伪代码)算法可能会更容易:
def isPalindrome(string):
set left to zero
set right to one less than string length
while left is less than right:
if string[left] is not equal to string[right]:
return false
add one to left
subtract one from right
return true
鉴于您无论如何都必须处理每个字符以形成反转的字符串,您不妨使用该处理能力来检查原始字符串中的字符。这样,如果不是回文,您可以提前退出。
当然,这会将空字符串视为回文,这可以说是正确的。如果您不认为这是正确的,只需预先检查一下:
def isPalindrome(string):
if string length is zero:
return false
set left to zero
... and so on
关于c++ - 遇到简单回文程序的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41214641/