nowsthetime
nowsthetime

Reputation: 1

What is wrong with my palindrome checker?

I'm trying to check wither a string is a palindrome by checking that each character always equals its "counterpart":

int isPalindrone(char *inputString) {
    int string_size = sizeof(inputString);
    int string_length = strlen(inputString);
    int stop = (string_length / 2) - 1;
    int char_size = sizeof(char);
    char *counterpart, idx; // pointer arithmetic: pointers inherently know their own size
    // counterpart of first char is last char
    counterpart = inputString + string_length - 1;

    for (idx = 0; idx <= stop; idx++) {
        if (*inputString != *counterpart) {
            return 0;
        }
        inputString += 1;
        counterpart -= 1;
    }
    return 1;
}

Upvotes: 0

Views: 79

Answers (1)

vmp
vmp

Reputation: 2420

You are using a lot more variables than what you really need.

You are using pointer arithmetic, so you can use the pointers to check the condition:

int isPalindrone(char *inputString) {
    char *counterpart = inputString + strlen(inputString) - 1;
    while(inputString < counterpart)
    {
        if(*inputString != *counterpart)
            return 0;
        inputString++; 
        counterpart--;
    }
    return 1;
}

or you could place the counterpart inside a for loop:

int isPalindrone(char *inputString) {
    for(char *counterpart = inputString + strlen(inputString) - 1; inputString < counterpart; inputString++, counterpart--)
       if(*inputString != *counterpart)
            return 0;
    return 1;
}

Upvotes: 1

Related Questions