3.1 Character-Classification Functions

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.

Table 3-2 Character-Classification Functions

Function Number  Function  Function Number  Function 
isalnum  islower 
isalpha  isprint 
isascii  ispunct 
iscntrl  10  isspace 
isdigit  11  isupper 
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.

Table 3-3 ASCII Characters and the Character- Classification Functions

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.

Example 3-1 Character-Classification Functions

/* 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
$


Previous Page | Next Page | Table of Contents | Index