C ++回文无法正常工作

时间:2017-09-30 11:41:43

标签: c++ function for-loop if-statement

我想创建返回true / false的函数,如果输入是回文或者不是,当给出abcddcba或aba时它不给出true,但它应该。请帮忙

bool checkPalindrome(char input[],int p=0) {
    if(input[1]=='\0'){
        return true;
    }
    if(sizeof(input)%2==0) { 
        int a = sizeof(input); 
        for(int i=0;i<(a/2);i++) {  
            if(input[0+i]==input[a-i-2]){
                p++;
            }
        }
        if(p==a/2){
            return true;
        } else{
            return false;
        }
    }
    else{
        int a = sizeof(input); 
        for(int i=0;i<((a-1)/2);i++)
        {
            if(input[0+i]==input[a-i-2]){
                p++;
            }
        }
        if(p==(a-1)/2){
            return true;
        } else{
            return false;
        }
    }
}

3 个答案:

答案 0 :(得分:3)

C ++风格:

bool checkPalindrome(const std::string& str)
{
    size_t len = str.size();
    for (size_t i = 0; i < len/2; i++)
    {
        if (str[i] != str[len-1-i])
            return false;
    }
    return true;
}

C风格:

bool checkPalindrome(const char* str)
{
    size_t len = str ? strlen(str) : 0;
    for (size_t i = 0; i < len/2; i++)
    {
        if (str[i] != str[len-1-i])
            return false;
    }
    return true;
}

在任何一种情况下,您可能需要评估(询问)是否应将空字符串视为回文结构。

答案 1 :(得分:1)

你的代码太长了。有一种简单的方法:在字符串的元素上迭代一次,将n-1与0和n-2与1进行比较,依此类推。

如果两个字符不相同则返回false,否则继续检查:

bool checkPalindrome(char* str) {
    const int size = strlen(str);
    for(int i(0), j(size) - 1); i < size / 2; i++, j--)
        if(str[i] != str[j])
            return false;
    return true;
}

int main(){

    char* str = "level";
    cout << checkPalindrome(str);

    cout << endl << endl;
    return 0;
}

答案 2 :(得分:0)

基于字符串和迭代器的C ++版本(仅为了完整性,其他答案已经非常好):

bool checkPalindrome(const string& str) {
    for (auto p = str.begin(),q = str.end();  p!=q && p!=q+1; p++ ) 
        if (*p!=*--q)       // if char from front doesn't match char from rear ?
            return false;   // then it's not a palindrome !
    return true;
}

说明: 迭代器p从字符串的前面开始,q在后​​面(在最后一个字符之后)。 p会提前,q会倒退。如果p到达qp已经过q(特殊情况,如果该字的长度均匀),那么结束了,我们可以结束回文。但是,如果之前,p处的字符与q之前的字符之间存在任何差异,则它不是回文。

Online demo, with little test suite