The character-classification functions take a single argument on which they perform a logical operation. The argument can have any value; it does not have to be an ASCII character. The isascii function determines if the argument is an ASCII character (0 through 177 octal). The other functions determine whether the argument is a particular type of ASCII character, such as a graphic character or digit. The isw* functions test wide characters. Character- classification information is in the LC_CTYPE category of the program's current locale.
For all functions, a positive return value indicates TRUE. A return value of 0 indicates FALSE.
To briefly reference the character-classification functions in a subsequent table, each function is assigned a number, as shown in Table 3-2.
Function Number | Function | Function Number | Function |
---|---|---|---|
1 | isalnum | 7 | islower |
2 | isalpha | 8 | isprint |
3 | isascii | 9 | ispunct |
4 | iscntrl | 10 | isspace |
5 | isdigit | 11 | isupper |
6 | isgraph | 12 | isxdigit |
Table 3-3 lists the numbers of the functions (as assigned in Table 3-2) that return the value TRUE for each of the given ASCII characters. The numeric code represents the octal value of each of the ASCII characters.
ASCII Values | Function Numbers | ASCII Values | Function Numbers |
---|---|---|---|
NUL 00 | 3,4 | @ 100 | 3,6,8,9 |
SOH 01 | 3,4 | A 101 | 1,2,3,6,8,11,12 |
STX 02 | 3,4 | B 102 | 1,2,3,6,8,11,12 |
ETX 03 | 3,4 | C 103 | 1,2,3,6,8,11,12 |
EOT 04 | 3,4 | D 104 | 1,2,3,6,8,11,12 |
ENQ 05 | 3,4 | E 105 | 1,2,3,6,8,11,12 |
ACK 06 | 3,4 | F 106 | 1,2,3,6,8,11,12 |
BEL 07 | 3,4 | G 107 | 1,2,3,6,8,11 |
BS 10 | 3,4 | H 110 | 1,2,3,6,8,11 |
HT 11 | 3,4,10 | I 111 | 1,2,3,6,8,11 |
LF 12 | 3,4,10 | J 112 | 1,2,3,6,8,11 |
VT 13 | 3,4,10 | K 113 | 1,2,3,6,8,11 |
FF 14 | 3,4,10 | L 114 | 1,2,3,6,8,11 |
CR 15 | 3,4,10 | M 115 | 1,2,3,6,8,11 |
SO 16 | 3,4 | N 116 | 1,2,3,6,8,11 |
SI 17 | 3,4 | O 117 | 1,2,3,6,8,11 |
DLE 20 | 3,4 | P 120 | 1,2,3,6,8,11 |
DC1 21 | 3,4 | Q 121 | 1,2,3,6,8,11 |
DC2 22 | 3,4 | R 122 | 1,2,3,6,8,11 |
DC3 23 | 3,4 | S 123 | 1,2,3,6,8,11 |
DC4 24 | 3,4 | T 124 | 1,2,3,6,8,11 |
NAK 25 | 3,4 | U 125 | 1,2,3,6,8,11 |
SYN 26 | 3,4 | V 126 | 1,2,3,6,8,11 |
ETB 27 | 3,4 | W 127 | 1,2,3,6,8,11 |
CAN 30 | 3,4 | X 130 | 1,2,3,6,8,11 |
EM 31 | 3,4 | Y 131 | 1,2,3,6,8,11 |
SUB 32 | 3,4 | Z 132 | 1,2,3,6,8,11 |
ESC 33 | 3,4 | [ 133 | 3,6,8,9 |
FS 34 | 3,4 | \ 134 | 3,6,8,9 |
GS 35 | 3,4 | ] 135 | 3,6,8,9 |
RS 36 | 3,4 | ^ 136 | 3,6,8,9 |
US 37 | 3,4 | - 137 | 3,6,8,9 |
SP 40 | 3,8,10 | ?` 140 | 3,6,8,9 |
! 41 | 3,6,8,9 | a 141 | 1,2,3,6,7,8,12 |
" 42 | 3,6,8,9 | b 142 | 1,2,3,6,7,8,12 |
# 43 | 3,6,8,9 | c 143 | 1,2,3,6,7,8,12 |
$ 44 | 3,6,8,9 | d 144 | 1,2,3,6,7,8,12 |
% 45 | 3,6,8,9 | e 145 | 1,2,3,6,7,8,12 |
& 46 | 3,6,8,9 | f 146 | 1,2,3,6,7,8,12 |
' 47 | 3,6,8,9 | g 147 | 1,2,3,6,7,8 |
( 50 | 3,6,8,9 | h 150 | 1,2,3,6,7,8 |
) 51 | 3,6,8,9 | i 151 | 1,2,3,6,7,8 |
* 52 | 3,6,8,9 | j 152 | 1,2,3,6,7,8 |
+ 53 | 3,6,8,9 | k 153 | 1,2,3,6,7,8 |
' 54 | 3,6,8,9 | l 154 | 1,2,3,6,7,8 |
- 55 | 3,6,8,9 | m 155 | 1,2,3,6,7,8 |
?. 56 | 3,6,8,9 | n 156 | 1,2,3,6,7,8 |
/ 57 | 3,6,8,9 | o 157 | 1,2,3,6,7,8 |
0 60 | 1,3,5,6,8,12 | p 160 | 1,2,3,6,7,8 |
1 61 | 1,3,5,6,8,12 | q 161 | 1,2,3,6,7,8 |
2 62 | 1,3,5,6,8,12 | r 162 | 1,2,3,6,7,8 |
3 63 | 1,3,5,6,8,12 | s 163 | 1,2,3,6,7,8 |
4 64 | 1,3,5,6,8,12 | t 164 | 1,2,3,6,7,8 |
5 65 | 1,3,5,6,8,12 | u 165 | 1,2,3,6,7,8 |
6 66 | 1,3,5,6,8,12 | v 166 | 1,2,3,6,7,8 |
7 67 | 1,3,5,6,8,12 | w 167 | 1,2,3,6,7,8 |
8 70 | 1,3,5,6,8,12 | x 170 | 1,2,3,5,6,8 |
9 71 | 1,3,5,6,8,12 | y 171 | 1,2,3,5,6,8 |
: 72 | 3,6,8,9 | z 172 | 1,2,3,5,6,8 |
; 73 | 3,6,8,9 | { 173 | 3,6,8,9 |
< 74 | 3,6,8,9 | | 174 | 3,6,8,9 |
= 75 | 3,6,8,9 | } 175 | 3,6,8,9 |
> 76 | 3,6,8,9 | ?~ 176 | 3,6,8,9 |
? 77 | 3,6,8,9 | DEL 177 | 3,4 |
Example 3-1 shows how the character- classification functions are used.
/* This example uses the isalpha, isdigit, and isspace functions * * to count the number of occurrences of letters, digits, and * * white-space characters entered through the standard input * * (stdin). */ #include <ctype.h> #include <stdio.h> #include <stdlib.h> main() { char c; int i = 0, j = 0, k = 0; while ((c = getchar()) != EOF) { if (isalpha(c)) i++; if (isdigit(c)) j++; if (isspace(c)) k++; } printf("Number of letters: %d\n", i); printf("Number of digits: %d\n", j); printf("Number of spaces: %d\n", k); }
The sample input and output from Example 3-1 follows:
$ RUN EXAMPLE1 I saw 35 men with mustaches on Christopher Street.<Return> <Ctrl/Z> Number of letters: 39 Number of digits: 2 Number of spaces: 9 $