Node:Character handling, Previous:Common library functions, Up:Common library functions
Character handling
Let's examine some simple library functions and see how they are used.
Some of the functions that are available on GNU systems for handling
individual characters are described below. They are all macros, so the
usual caveats about macro parameters apply. (See Macro functions.)
All of the functions below accept single variables of type char
as parameters. To use any of them, you must include the system header
file ctype.h
; the library used is simply glibc
,
which is linked automatically.
isalnum
- Returns true if and only if the parameter is alphanumeric: that is, an
alphabetic character (see
isalpha
) or a digit (seeisdigit
). isalpha
- Returns true if and only if the parameter is alphabetic. An
alphabetic character is any character from
A
throughZ
ora
throughz
. isascii
- Returns true if and only if the parameter is a valid ASCII character:
that is, it has an integer value in the range 0 through 127. (Remember,
the
char
type in C is actually a kind of integer!) iscntrl
- Returns true if and only if the parameter is a control character.
Control characters vary from system to system, but are usually defined
as characters in the range 0 to 31.
isdigit
- Returns true if and only if the parameter is a digit in the range 0
through 9.
isgraph
- Returns true if and only if the parameter is graphic: that is, if the
character is either alphanumeric (see
isalnum
) or punctuation (seeispunct
). All graphical characters are valid ASCII characters, but ASCII also includes non-graphical characters such as control characters (seeiscntrl
) and whitespace (seeisspace
). islower
- Returns true if and only if the parameter is a lower-case alphabetic
character (see
isalpha
). isprint
- Returns true if and only if the parameter is a printable character: that
is, the character is either graphical (see
isgraph
) or a space character. ispunct
- Returns true if and only if the parameter is a punctuation character.
isspace
- Returns true if and only if the parameter is a whitespace character.
What is defined as whitespace varies from system to system, but it
usually includes space characters and tab characters, and sometimes
newline characters.
isupper
- Returns true if and only if the parameter is an upper-case alphabetic
character (see
isalpha
). isxdigit
- Returns true if and only if the parameter is a valid hexadecimal digit:
that is, a decimal digit (see
isdigit
), or a letter froma
throughf
orA
throughF
. toascii
- Returns the parameter stripped of its eighth bit, so that it has an
integer value from 0 through 127 and is therefore a valid ASCII
character. (See
isascii
.) tolower
- Converts a character into its lower-case counterpart. Does not affect
characters which are already in lower case.
toupper
- Converts a character into its upper-case counterpart. Does not affect characters which are already in upper case.
/********************************************************/ /* */ /* Demonstration of character utility functions */ /* */ /********************************************************/ #include <stdio.h> #include <ctype.h> #define allchars ch = 0; isascii(ch); ch++ int main () /* A criminally long main program! */ { char ch; printf ("\n\nVALID CHARACTERS FROM isgraph:\n\n"); for (allchars) { if (isgraph(ch)) { printf ("%c ",ch); } } printf ("\n\nVALID CHARACTERS FROM isalnum:\n\n"); for (allchars) { if (isalnum(ch)) { printf ("%c ",ch); } } printf ("\n\nVALID CHARACTERS FROM isalpha:\n\n"); for (allchars) { if (isalpha(ch)) { printf ("%c ",ch); } } printf ("\n\nVALID CHARACTERS FROM isupper:\n\n"); for (allchars) { if (isupper(ch)) { printf ("%c ",ch); } } printf ("\n\nVALID CHARACTERS FROM islower:\n\n"); for (allchars) { if (islower(ch)) { printf ("%c ",ch); } } printf ("\n\nVALID CHARACTERS FROM isdigit:\n\n"); for (allchars) { if (isdigit(ch)) { printf ("%c ",ch); } } printf ("\n\nVALID CHARACTERS FROM isxdigit:\n\n"); for (allchars) { if (isxdigit(ch)) { printf ("%c ",ch); } } printf ("\n\nVALID CHARACTERS FROM ispunct:\n\n"); for (allchars) { if (ispunct(ch)) { printf ("%c ",ch); } } printf ("\n\n"); return 0; }
The output of the above code example is as follows:
VALID CHARACTERS FROM isgraph: ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ VALID CHARACTERS FROM isalnum: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z VALID CHARACTERS FROM isalpha: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z VALID CHARACTERS FROM isupper: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z VALID CHARACTERS FROM islower: a b c d e f g h i j k l m n o p q r s t u v w x y z VALID CHARACTERS FROM isdigit: 0 1 2 3 4 5 6 7 8 9 VALID CHARACTERS FROM isxdigit: 0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f VALID CHARACTERS FROM ispunct: ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~