diff --git a/algorithms/CPlusPlus/Maths/palindrome.cpp b/algorithms/CPlusPlus/Maths/palindrome.cpp index 3c580630..aef9630a 100644 --- a/algorithms/CPlusPlus/Maths/palindrome.cpp +++ b/algorithms/CPlusPlus/Maths/palindrome.cpp @@ -1,21 +1,42 @@ // Program to find whether a number and word is palindrome or not. #include //header file +#include using namespace std; int main() //Main function { string num_str = ""; //define variable - cin >> num_str; //taking input from user + cin >> num_str; //taking input from user string new_str = ""; //define a new variable - for(int x = (num_str.size()-1); x >= 0; x--){ //for loop started - new_str += num_str[x]; //assigning the value input by user to new variable in reverse order - } //for loop end + + string test_str = ""; //define new variables for cleaning the input + string low = ""; + char temp; + int i; - cout << (num_str == new_str ? "palindrome" : "Non-palindrome"); //checking whether the value assigned to both variables is equal or not using ternary operator and printing whether it's palindrome or non-palindrome + for(i = 0; i < num_str.size(); i++){ //make num_str all lower case and remove all punctuation and spaces + temp = num_str[i]; + if(isalnum(temp)){ + low = char(tolower(temp)); //converting the character to be lower case + test_str.append(low); //adding that lowercase character to the new string + } + } + for(int x = (test_str.size()-1); x >= 0; x--){ //for loop started + new_str += test_str[x]; //assigning the value input by user to new variable in reverse order + } //for loop end + + string pal = ""; + if(test_str == new_str){ //checking if the variables are equal and setting a string according to the result + pal = "palindrome"; + }else{ + pal = "Non-palindrome"; + } + cout << pal; //printing if it is a palindrome or non-palindrome return 0; //returning the main function } //complexity of the program is O(n) -//test cases:- 101,pop,asdfgfdsa,123454321,obobo,nancyiycnan etc. \ No newline at end of file +//test cases:- 101,pop,asdfgfdsa,123454321,obobo,nancyiycnan etc. +//additional test cases: "Sit o,n a 'potat+o pan, Otis", "Sit on a potato pan, Otis"