You are here

Palindrome in C

Palindrome in C language or C program to check if a string or number is palindrome or not. C program to check if a number is a palindrome or not. A palindrome string is a string that reads the same backward as forward and can be of odd or even length. A palindrome number is a number which is equal to its reverse. Our program works as follows: at first, we copy the entered string into a new string, and then we reverse and compare it with original string. If both of them have the same sequence of characters, i.e., they are identical then the entered string is a palindrome otherwise not. To perform copy, reverse and compare operations we use strcpy, strrev and strcmp functions of "string.h" respectively. If you do not wish to use these functions see C program to check palindrome without using string functions. Some palindrome string examples are "C", "CC", "CCC", "madam", "abba", "ab121ba", "C++&&++C"etc. A palindrome string can be a single word or a phrase or a sentence

Palindrome program in C language

#include <stdio.h>
#include <string.h>
 
int main()
{
   char a[100], b[100];
 
   printf("Enter a string to check if it is a palindrome\n");
   gets(a);
 
   strcpy(b,a);
   strrev(b);
 
   if (strcmp(a,b) == 0)
      printf("Entered string is a palindrome.\n");
   else
      printf("Entered string is not a palindrome.\n");
 
   return 0;
}

Download palindrome program.

Output of C palindrome program:
Palindrome program in C output

Palindrome number in C

#include <stdio.h>
 
main()
{
   int n, reverse = 0, temp;
 
   printf("Enter a number to check if it is a palindrome or not\n");
   scanf("%d",&n);
 
   temp = n;
 
   while (temp != 0)
   {
      reverse = reverse * 10;
      reverse = reverse + temp%10;
      temp    = temp/10;
   }
 
   if (n == reverse)
      printf("%d is a palindrome number.\n", n);
   else
      printf("%d is not a palindrome number.\n", n);
 
   return 0;
}

C program for palindrome without using string functions

#include <stdio.h>
#include <string.h>
 
int main()
{
   char text[100];
   int begin, middle, end, length = 0;
 
   gets(text);
 
   while (text[length] != '\0')
      length++;
 
   end = length - 1;
   middle = length/2;
 
   for (begin = 0; begin < middle; begin++)
   {
      if (text[begin] != text[end])
      {
         printf("Not a palindrome.\n");
         break;
      }
      end--;
   }
   if (begin == middle)
      printf("Palindrome.\n");
 
   return 0;
}

C palindrome program using functions and pointers

#include <stdio.h>
 
int is_palindrome(char*);
void copy_string(char*, char*);
void reverse_string(char*);
int string_length(char*);
int compare_string(char*, char*);
 
int main()
{
   char string[100];
   int result;
 
   printf("Input a string\n");
   gets(string);
 
   result = is_palindrome(string);
 
   if ( result == 1 )
      printf("\"%s\" is a palindrome string.\n", string);
   else
      printf("\"%s\" is not a palindrome string.\n", string); 
 
   return 0;
}
 
int is_palindrome(char *string)
{
   int check, length;
   char *reverse;
 
   length = string_length(string);    
   reverse = (char*)malloc(length+1);    
 
   copy_string(reverse, string);
   reverse_string(reverse);
 
   check = compare_string(string, reverse);
 
   free(reverse);
 
   if ( check == 0 )
      return 1;
   else
      return 0;
}
 
int string_length(char *string)
{
   int length = 0;  
 
   while(*string)
   {
      length++;
      string++;
   }
 
   return length;
}
 
void copy_string(char *target, char *source)
{
   while(*source)
   {
      *target = *source;
      source++;
      target++;
   }
   *target = '\0';
}
 
void reverse_string(char *string) 
{
   int length, c;
   char *begin, *end, temp;
 
   length = string_length(string);
 
   begin = string;
   end = string;
 
   for ( c = 0 ; c < ( length - 1 ) ; c++ )
       end++;
 
   for ( c = 0 ; c < length/2 ; c++ ) 
   {        
      temp = *end;
      *end = *begin;
      *begin = temp;
 
      begin++;
      end--;
   }
}
 
int compare_string(char *first, char *second)
{
   while(*first==*second)
   {
      if ( *first == '\0' || *second == '\0' )
         break;
 
      first++;
      second++;
   }
   if( *first == '\0' && *second == '\0' )
      return 0;
   else
      return -1;
}

Pointers are used in functions; you can write this program without using them.