'Check if a string is palindrome

I need to create a program that allows a user to input a string and my program will check to see if that string they entered is a palindrome (word that can be read the same backwards as it can forwards).

c++


Solution 1:[1]

Note that reversing the whole string (either with the rbegin()/rend() range constructor or with std::reverse) and comparing it with the input would perform unnecessary work.

It's sufficient to compare the first half of the string with the latter half, in reverse:

#include <string>
#include <algorithm>
#include <iostream>
int main()
{
    std::string s;
    std::cin >> s;
    if( equal(s.begin(), s.begin() + s.size()/2, s.rbegin()) )
        std::cout << "is a palindrome.\n";
    else
        std::cout << "is NOT a palindrome.\n";
}

demo: http://ideone.com/mq8qK

Solution 2:[2]

bool IsPalindrome(const char* psz)
{
    int i = 0;
    int j;

    if ((psz == NULL) || (psz[0] == '\0'))
    {
        return false;
    }

    j = strlen(psz) - 1;
    while (i < j)
    {
        if (psz[i] != psz[j])
        {
            return false;
        }
        i++;
        j--;
    }
    return true;

}

// STL string version:

bool IsPalindrome(const string& str)
{
    if (str.empty())
        return false;

    int i = 0;                // first characters
    int j = str.length() - 1; // last character

    while (i < j)
    {
        if (str[i] != str[j])
        {
            return false;
        }
        i++;
        j--;
    }
    return true;
}

Solution 3:[3]

// The below C++ function checks for a palindrome and 
// returns true if it is a palindrome and returns false otherwise

bool checkPalindrome ( string s )
{
    // This calculates the length of the string

    int n = s.length();

    // the for loop iterates until the first half of the string
    // and checks first element with the last element,
    // second element with second last element and so on.
    // if those two characters are not same, hence we return false because
    // this string is not a palindrome 

    for ( int i = 0; i <= n/2; i++ ) 
    {
        if ( s[i] != s[n-1-i] )
            return false;
    }
    
    // if the above for loop executes completely , 
    // this implies that the string is palindrome, 
    // hence we return true and exit

    return true;
}

Solution 4:[4]

#include <iostream>
#include <string>

bool isPalindrome(const std::string& str){

    if(str.empty()) return true;

    std::string::const_iterator itFirst = str.begin();
    std::string::const_iterator itLast = str.end() - 1;

    while(itFirst < itLast) {
        if (*itFirst != *itLast)
            return false;
    
        ++itFirst;
        --itLast;
    }
    return true;
}

int main(){

    while(1){
        std::string input;
        std::cout << "Eneter a string ...\n";
        std::cin >> input;

        if(isPalindrome(input)){
            std::cout << input <<  " is palindrome.\n";
        } else {
            std::cout << input << " is not palindrome.\n";
        }
    }

    return 0;
}

Solution 5:[5]

Check the string starting at each end and meet in the middle. Return false if there is a discrepancy.

#include <iostream>

bool palidromeCheck(std::string str) {
    for (int i = 0, j = str.length()-1; i <= j; i++, j--)
        if (str[i] != str[j])
            return false;
    return true;
}

int main(){
    std::cout << palidromeCheck("mike");
    std::cout << palidromeCheck("racecar");
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 sehe
Solution 3
Solution 4 mnabil
Solution 5 tothemax