Determine if char is a num or letter

CCharAlphanumeric

C Problem Overview


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

C Solutions


Solution 1 - C

You'll want to use the isalpha() and isdigit() standard functions in <ctype.h>.

char c = 'a'; // or whatever

if (isalpha(c)) {
    puts("it's a letter");
} else if (isdigit(c)) {
    puts("it's a digit");
} else {
    puts("something else?");
}

Solution 2 - C

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.

Solution 3 - C

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

  • Numeric - if (theChar >= '0' && theChar <= '9')
  • Alphabetic -
    if (theChar >= 'A' && theChar <= 'Z' || theChar >= 'a' && theChar <= 'z')

Take a look at an ASCII table to see for yourself.

Solution 4 - C

Neither of these does anything useful. Use isalpha() or isdigit() from the standard library. They're in <ctype.h>.

Solution 5 - C

If (theChar >= '0' && theChar <='9') it's a digit. You get the idea.

Solution 6 - C

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.

How to check if a character is number or letter

Solution 7 - C

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMonaView Question on Stackoverflow
Solution 1 - CGreg HewgillView Answer on Stackoverflow
Solution 2 - CChristopher NeylanView Answer on Stackoverflow
Solution 3 - CAusCBlokeView Answer on Stackoverflow
Solution 4 - CErnest Friedman-HillView Answer on Stackoverflow
Solution 5 - CMike DunlaveyView Answer on Stackoverflow
Solution 6 - CPankaj PrakashView Answer on Stackoverflow
Solution 7 - CCiro Santilli Путлер Капут 六四事View Answer on Stackoverflow