# Palindrome in C

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

1. Copy input string into a new string (strcpy function).
2. Reverse it (we recommend not to use strrev function as it's not compatible with C99).
3. Compare it with the original string (strcmp function).
4. 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 <stdio.h>
#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:

## C program for palindrome without using string functions

#include <stdio.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;
}

## Palindrome number in C

#include <stdio.h>

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

#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\" 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.