Palindrome

Usage

Source code

palindrome.c

// palindrome.c -Inky, February 2007
#include <stdio.h>
#include <stdlib.h>

int main(const int argc, const char ** argv) {
    char * strings[3] = {
        "Usage: %s phrase\n",
        "This is a palindrome.\n",
        "This is NOT a palindrome.\n"
    }, * phrase;
    unsigned int i, j, k;
    
    if (argc <= 1) {
        fprintf(stderr, strings[0], argv[0]);
        return 1;
    }
    unsigned int wordlen[argc-1];
    
    // Initialise phrase and determine the character count
    for (i = 1, k = 0; i < argc; i++) {
        wordlen[i-1] = 0;
        
        for (j = 0; argv[i][j] != '\0'; j++)
            wordlen[i-1]++;
        
        k += wordlen[i-1];
    }
    phrase = malloc(++k * sizeof(char));
    
    // Get letters from the string
    for (i = 1, k = 0; i < argc; i++) {
        for (j = 0; j < wordlen[i-1]; j++) {
            if (argv[i][j] >= 'a' && argv[i][j] <= 'z')
                phrase[k++] = argv[i][j];
            else if (argv[i][j] >= 'A' && argv[i][j] <= 'Z')
                phrase[k++] = argv[i][j] + 0x20;
        }
    }
    phrase[k] = '\0';
    
    // Check if it's a palindrome
    for (i = 0; i <= (k-1) / 2; i++) {
        if (phrase[i] != phrase[k-i-1]) {
            printf(strings[2]);
            return 1;
        }
    }
    
    printf(strings[1]);
    return 0;
}