dclark
dclark

Reputation: 509

Char Comparison in C

I'm trying to compare two chars to see if one is greater than the other. To see if they were equal, I used strcmp. Is there anything similar to strcmp that I can use?

Upvotes: 41

Views: 420472

Answers (4)

SO Stinks
SO Stinks

Reputation: 3408

You are going to have to roll your own way of comparing characters. The C standard only mandates that the digits 0 to 9 have an easy way to compare them using basic c1 > c2 style comparison. This is NOT guaranteed to work for other characters like letters. (Although in practice it often will for simple ASCII ranges like a-z and A-Z.)

One way to do it, often unsatisfactory, is to convert the characters to strings and use strcoll().

Upvotes: 0

Victor
Victor

Reputation: 14573

A char variable is actually an 8-bit integral value. It will have values from 0 to 255. These are almost always ASCII codes, but other encodings are allowed. 0 stands for the C-null character, and 255 stands for an empty symbol.

So, when you write the following assignment:

char a = 'a'; 

It is the same thing as this on an ASCII system.

char a = 97;

So, you can compare two char variables using the >, <, ==, <=, >= operators:

char a = 'a';
char b = 'b';

if( a < b ) printf("%c is smaller than %c", a, b);
if( a > b ) printf("%c is smaller than %c", a, b);
if( a == b ) printf("%c is equal to %c", a, b);

Note that even if ASCII is not required, this function will work because C requires that the digits are in consecutive order:

int isdigit(char c) {
    if(c >= '0' && c <= '9') 
        return 1;
    return 0;
} 

Upvotes: 41

Vorsprung
Vorsprung

Reputation: 34297

In C the char type has a numeric value so the > operator will work just fine for example

#include <stdio.h>
main() {

    char a='z';

    char b='h';

    if ( a > b ) {
        printf("%c greater than %c\n",a,b);
    }
}

Upvotes: 12

Ayman Khamouma
Ayman Khamouma

Reputation: 996

I believe you are trying to compare two strings representing values, the function you are looking for is:

int atoi(const char *nptr);

or

long int strtol(const char *nptr, char **endptr, int base);

these functions will allow you to convert a string to an int/long int:

int val = strtol("555", NULL, 10);

and compare it to another value.

int main (int argc, char *argv[])
{
    long int val = 0;
    if (argc < 2)
    {
        fprintf(stderr, "Usage: %s number\n", argv[0]);
        exit(EXIT_FAILURE);
    }

    val = strtol(argv[1], NULL, 10);
    printf("%d is %s than 555\n", val, val > 555 ? "bigger" : "smaller");

    return 0;
}

Upvotes: 2

Related Questions