1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
/* Copyright (C) 2017 Graham Ollis */
#include <libpalindrome.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
static void
copy_letters(char *buffer, const char *original)
{
while(*original != 0)
{
if(isalpha(*original))
*(buffer++) = tolower(*original);
original++;
}
*buffer = 0;
}
static void
copy_reverse(char *buffer, const char *original)
{
int i;
for(i=strlen(original)-1; i >= 0; i--)
*(buffer++) = original[i];
*buffer = 0;
}
int
is_palindrome(const char *something)
{
char *copy1;
char *copy2;
int ret;
size_t len;
len = strlen(something);
copy1 = malloc(len+1);
copy2 = malloc(len+1);
copy_letters(copy1, something);
copy_reverse(copy2, copy1);
ret = strncmp(copy1, copy2, len) == 0;
free(copy1);
free(copy2);
return ret;
}
|