How do I determine if a char
in C such as a
or 9
is a number or a letter?
Is it better to use:
int a = Asc(theChar);
or this?
int a = (int)theChar
This question is related to
c
char
alphanumeric
C99 standard on c >= '0' && c <= '9'
c >= '0' && c <= '9'
(mentioned in another answer) works because C99 N1256 standard draft 5.2.1 "Character sets" says:
In both the source and execution basic character sets, the value of each character after 0 in the above list of decimal digits shall be one greater than the value of the previous.
ASCII is not guaranteed however.
Neither of these does anything useful. Use isalpha()
or isdigit()
from the standard library. They're in <ctype.h>
.
chars are just integers, so you can actually do a straight comparison of your character against literals:
if( c >= '0' && c <= '9' ){
This applies to all characters. See your ascii table.
ctype.h also provides functions to do this for you.
You can normally check for ASCII letters or numbers using simple conditions
if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
{
/*This is an alphabet*/
}
For digits you can use
if (ch >= '0' && ch <= '9')
{
/*It is a digit*/
}
But since characters in C are internally treated as ASCII values you can also use ASCII values to check the same.
If (theChar >= '0' && theChar <='9')
it's a digit. You get the idea.
<ctype.h>
includes a range of functions for determining if a char
represents a letter or a number, such as isalpha
, isdigit
and isalnum
.
The reason why int a = (int)theChar
won't do what you want is because a
will simply hold the integer value that represents a specific character. For example the ASCII number for '9'
is 57, and for 'a'
it's 97.
Also for ASCII:
if (theChar >= '0' && theChar <= '9')
if (theChar >= 'A' && theChar <= 'Z' || theChar >= 'a' && theChar <= 'z')
Take a look at an ASCII table to see for yourself.
Source: Stackoverflow.com