C ++回文函数

时间:2016-10-02 23:34:58

标签: c++ function palindrome

 #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 ++代码中找不到我的错误!我知道它真的很简单,但它太令人沮丧了!

3 个答案:

答案 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`

请确保包含算法。我可以理解,如果您因某些原因不想使用图书馆,但我只是想确保您知道这可以很容易地完成。