Sunday 13 November 2011

How do I determine whether a character is numeric, alphabetic, and so on?in C programming

How do I determine whether a character is numeric, alphabetic, and so on?

The header file ctype.h defines various functions for determining what class a character belongs to. These consist of the following functions:

Function  Character Class                  Returns Nonzero for Characters
-----------------------------------------------------------------------------------------------------------------
isdigit()    Decimal digits                     0–9
isxdigit()  Hexadecimal digits               0–9, a–f, or A–F
isalnum()  Alphanumerics                    0–9, a–z, or A–Z
isalpha()   Alphabetics                          a–z or A–Z
islower()   Lowercase alphabetics         a–z
isupper()   Uppercase alphabetics          A–Z
isspace()   Whitespace Space, tab,        vertical tab, newline, form
                                                        feed, or carriage return
isgraph()   Nonblank characters            Any character that appears nonblank
                                                         when printed (ASCII 0x21 through 0x7E)
isprint()      Printable characters            All the isgraph() characters, plus space
ispunct()     Punctuation                       Any character in isgraph() that is not in
isalnum()
iscntrl()        Control characters            Any character not in isprint() (ASCII
                                                         0x00 through 0x1F plus 0x7F)

There are three very good reasons for calling these macros instead of writing your own tests for character classes. They are pretty much the same reasons for using standard library functions in the first place. First, these macros are fast. Because they are generally implemented as a table lookup with some bit-masking magic, even a relatively complicated test can be performed much faster than an actual comparison of the value of the character.

Second, these macros are correct. It’s all too easy to make an error in logic or typing and include a wrong character (or exclude a right one) from a test. 

Third, these macros are portable. Believe it or not, not everyone uses the same ASCII character set with PC

extensions. You might not care today, but when you discover that your next computer uses Unicode rather than ASCII, you’ll be glad you wrote code that didn’t assume the values of characters in the character set.

The header file ctype.h also defines two functions to convert characters between upper- and lowercase
alphabetics. These are toupper() and tolower(). The behavior of toupper() and tolower() is undefined if their arguments are not lower- and uppercase alphabetic characters, respectively, so you mustremember to check using islower() and isupper() before calling toupper() and tolower().

Cross Reference:

V.1: What is a macro, and how do you use it?
VI.2: How can I remove the trailing spaces from a string?
VI.3: How can I remove the leading spaces from a string?
XX.18: How do you tell whether a character is a letter of the alphabet?
XX.19: How do you tell whether a character is a number?

No comments:

Post a Comment