C program to check if a string or a number is palindrome or not. A palindrome string is one that reads the same backward as well as forward. It can be of odd or even length.
A palindrome number is a number that is equal to its reverse.
Algorithm to check Palindrome string
- Copy input string into a new string (strcpy function).
- Reverse it (we recommend not to use strrev function as it's not compatible with C99).
- Compare it with the original string (strcmp function).
- If both of them have the same sequence of characters, i.e., they are identical, then the string is a palindrome otherwise not.
C program to check palindrome without using string functions. Some palindrome strings are: "C", "CC", "madam", "ab121ba", "C++&&++C".
Palindrome program in C language
#include <string.h>
int main()
{
char a[100], b[100];
printf("Enter a string to check if it's a palindrome\n");
gets(a);
strcpy(b, a); // Copying input string
strrev(b); // Reversing the string
if (strcmp(a, b) == 0) // Comparing input string with the reverse string
printf("The string is a palindrome.\n");
else
printf("The string isn't a palindrome.\n");
return 0;
}
Output of C palindrome program:
Download palindrome program.
C program for palindrome without using string functions
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;
}
Palindrome number in C
int main()
{
int n, r = 0, t;
printf("Enter an integer to check if it's palindrome or not\n");
scanf("%d", &n);
t = n;
while (t != 0)
{
r = r * 10;
r = r + t%10;
t = t/10;
}
if (n == r)
printf("%d is a palindrome number.\n", n);
else
printf("%d isn't a palindrome number.\n", n);
return 0;
}
C palindrome program using functions and pointers
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\" isn't 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;
}
You can also write the program without using pointers. A palindrome string can be a single word or a phrase or a sentence.