簡體   English   中英

C ++回文不起作用

[英]C++ palindrome not working

我想創建一個根據輸入是否為回文而返回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;
        }
    }
}

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;
}

無論哪種情況,您都可能需要評估(詢問)是否應將空字符串視為回文。

您的代碼太長。 有一個簡單的方法:在比較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;
}

基於字符串和迭代器的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之前的字符之間有任何區別,則不是回文。

在線演示,幾乎沒有測試套件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM