All pastes #1979292 Raw Edit

Untitled

public text v1 · immutable
#1979292 ·published 2010-11-02 02:51 UTC
rendered paste body
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>


char* selectChars(char* from, int (*what)(int), int (*where)(int))
{
	char* str = (char*)malloc(sizeof(char)*(strlen(from) + 1));
	char* ptr = str;
	while (*from != '\0')
	{
		if ((*where)(*from))
		{
			*ptr++ = (what == NULL) ? *from : (*what)(*from);
		}
		from++;
	}
	*ptr = '\0';
	return str;
}

char* reverse(char* str)
{
	char temp;
	char* front = str;
	char* back = str;
	while (*back != '\0')
	{
		back++;
	}
	back--;
	while (front < back)
	{
		temp = *back;
		*back = *front;
		*front = temp;
		front++;
		back--;
	}
	return str;
}

int isPalindrome(char* str)
{
	char* forwards = selectChars(str, tolower, isalpha);
	char* backwards = reverse(selectChars(str, tolower, isalpha));
	int result = (strcmp(forwards, backwards) == 0);
	free(forwards);
	free(backwards);
	return result;
}

int main(int argc, char** argv)
{
	if (argc < 2)
	{
		puts("Requires a string to check.");
		return 0;
	}
	if (isPalindrome(argv[1]))
	{
		puts("Is.");
	}
	else
	{
		puts("Isn't.");
	}
	return 0;
}