#include <iostream>
#include <string>
using namespace std;
bool isPalindrome(string str){
for(int i = 0; i <= str.length()-1; i++){
if(str[i] != str[str.length()-1-i]){
return false;
}else {
return true;
}
}
}
main(){
string text;
do{
cout << "Enter some Text: " << endl;
cin >> text;
if(isPalindrome(text)){
cout << "The text is a palindrome" << endl;
}
else{
cout << "The text is not a palindrome" << endl;
}
}while(text != "Q");
return 0;
}
有人可以向我解释我的代码有什么问题吗? 如果我输入&#34; otto&#34;作为文本,代码产生正确的答案。 如果输入&#34; ottop&#34;作为文本,代码也正常工作,但如果我输入&#34; ottopo&#34;我得到了&#34; ottopo&#34;是一个回文,显然不是。
我似乎错过了某些东西或者可能忽略了某些东西。我知道我可以使用c ++标准库功能,但我真的想知道它为什么不按照我想要的方式工作。
我已经在java,python,javascript,ruby等中实现了回文函数......我只能在这个c ++代码中找不到我的错误!我知道它真的很简单,但它太令人沮丧了!
答案 0 :(得分:0)
在那里的else语句之后你不必拥有return true
。把它放在for循环之外,你的代码应该可以工作。
作为一个额外的挑剔,你不必检查直到strlen(s) - 1,但strlen(s)/ 2实际上是足够的。我会把这一点告诉你,因为它很简单,与你所做的完全不同。
答案 1 :(得分:0)
在循环的第一次迭代中返回true。而且你只需要迭代一半的字符串。
修正:
size_t len = str.length();
for(int i = 0; i < len/2; i++){
if(str[i] != str[len-1-i]){
return false;
}
}
return true;
答案 2 :(得分:0)
如上所述,return true;
不应位于else
,而应位于for
循环结束之后。这也可以在几行中完成。如果字符串与正常情况相同,则字符串是回文结构。你所需要的只是
reversedText = reverse(text.begin(), text.end());
if (text == reversedText)
//indicate that it is a palindrome
else
//indicate that it is not a palindrome`
请确保包含算法。我可以理解,如果您因某些原因不想使用图书馆,但我只是想确保您知道这可以很容易地完成。