Reputation: 509
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
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
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
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
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