Show the types of all the ASCII characters

This is an example C program which prints what character types are true for all of the ascii characters from 0 to 127.

#include <ctype.h>
#include <stdio.h>
#include <string.h>

/* Define a typedef for use in our struct. */

typedef int (*isfunc_t) (int);

/* Define a macro to initialize the elements of the struct. */

#define F(x) {x, #x}

struct iser {
    isfunc_t f;
    const char * name;
}
isers[] = {
    F (isalnum),
    F (isalpha),
    F (isascii),
    F (isblank),
    F (iscntrl),
    F (isdigit),
    F (isgraph),
    F (islower),
    F (isnumber),
    F (isprint),
    F (ispunct),
    F (isspace),
    F (isupper),
    F (isxdigit),
};

#define n_isers (sizeof (isers)/sizeof (struct iser))

/* Print a header for the table, going vertically. */

static void
print_header ()
{
    int i;
    int max_len = 0;
    int l[n_isers];
    const char * spacer = "          ";
    for (i = 0; i < n_isers; i++) {
        l[i] = strlen (isers[i].name);
        if (l[i] > max_len) {
            max_len = l[i];
        }
    }
    for (i = 0; i < max_len; i++) {
        int j;
        printf ("%s|", spacer);
        for (j = 0; j < n_isers; j++) {
            if (i < l[j]) {
                printf ("%c|", isers[j].name[i]);
            }
            else {
                printf (" |");
            }
        }
        printf ("\n");
    }
}

static void
print_types ()
{
    int c;
    for (c = 0; c < 128; c++) {
        int i;
        printf ("%02X %03o ", c, c);
        if (isprint (c)) {
            printf ("%c  ", c);
        }
        else {
            printf ("-- ");
        }
        printf ("|");
        for (i = 0; i < n_isers; i++) {
            int ok;
            ok = isers[i].f (c);
            if (ok) {
                printf ("O");
            }
            else {
                printf ("X");
            }
            printf ("|");
                            
        }
        printf ("\n");
    }
}

int main ()
{
    print_header ();
    print_types ();
    return 0;
}

(download)

The output of the example looks like this:

          |i|i|i|i|i|i|i|i|i|i|i|i|i|i|
          |s|s|s|s|s|s|s|s|s|s|s|s|s|s|
          |a|a|a|b|c|d|g|l|n|p|p|s|u|x|
          |l|l|s|l|n|i|r|o|u|r|u|p|p|d|
          |n|p|c|a|t|g|a|w|m|i|n|a|p|i|
          |u|h|i|n|r|i|p|e|b|n|c|c|e|g|
          |m|a|i|k|l|t|h|r|e|t|t|e|r|i|
          | | | | | | | | |r| | | | |t|
00 000 -- |X|X|O|X|O|X|X|X|X|X|X|X|X|X|
01 001 -- |X|X|O|X|O|X|X|X|X|X|X|X|X|X|
02 002 -- |X|X|O|X|O|X|X|X|X|X|X|X|X|X|
03 003 -- |X|X|O|X|O|X|X|X|X|X|X|X|X|X|
04 004 -- |X|X|O|X|O|X|X|X|X|X|X|X|X|X|
05 005 -- |X|X|O|X|O|X|X|X|X|X|X|X|X|X|
06 006 -- |X|X|O|X|O|X|X|X|X|X|X|X|X|X|
07 007 -- |X|X|O|X|O|X|X|X|X|X|X|X|X|X|
08 010 -- |X|X|O|X|O|X|X|X|X|X|X|X|X|X|
09 011 -- |X|X|O|O|O|X|X|X|X|X|X|O|X|X|
0A 012 -- |X|X|O|X|O|X|X|X|X|X|X|O|X|X|
0B 013 -- |X|X|O|X|O|X|X|X|X|X|X|O|X|X|
0C 014 -- |X|X|O|X|O|X|X|X|X|X|X|O|X|X|
0D 015 -- |X|X|O|X|O|X|X|X|X|X|X|O|X|X|
0E 016 -- |X|X|O|X|O|X|X|X|X|X|X|X|X|X|
0F 017 -- |X|X|O|X|O|X|X|X|X|X|X|X|X|X|
10 020 -- |X|X|O|X|O|X|X|X|X|X|X|X|X|X|
11 021 -- |X|X|O|X|O|X|X|X|X|X|X|X|X|X|
12 022 -- |X|X|O|X|O|X|X|X|X|X|X|X|X|X|
13 023 -- |X|X|O|X|O|X|X|X|X|X|X|X|X|X|
14 024 -- |X|X|O|X|O|X|X|X|X|X|X|X|X|X|
15 025 -- |X|X|O|X|O|X|X|X|X|X|X|X|X|X|
16 026 -- |X|X|O|X|O|X|X|X|X|X|X|X|X|X|
17 027 -- |X|X|O|X|O|X|X|X|X|X|X|X|X|X|
18 030 -- |X|X|O|X|O|X|X|X|X|X|X|X|X|X|
19 031 -- |X|X|O|X|O|X|X|X|X|X|X|X|X|X|
1A 032 -- |X|X|O|X|O|X|X|X|X|X|X|X|X|X|
1B 033 -- |X|X|O|X|O|X|X|X|X|X|X|X|X|X|
1C 034 -- |X|X|O|X|O|X|X|X|X|X|X|X|X|X|
1D 035 -- |X|X|O|X|O|X|X|X|X|X|X|X|X|X|
1E 036 -- |X|X|O|X|O|X|X|X|X|X|X|X|X|X|
1F 037 -- |X|X|O|X|O|X|X|X|X|X|X|X|X|X|
20 040    |X|X|O|O|X|X|X|X|X|O|X|O|X|X|
21 041 !  |X|X|O|X|X|X|O|X|X|O|O|X|X|X|
22 042 "  |X|X|O|X|X|X|O|X|X|O|O|X|X|X|
23 043 #  |X|X|O|X|X|X|O|X|X|O|O|X|X|X|
24 044 $  |X|X|O|X|X|X|O|X|X|O|O|X|X|X|
25 045 %  |X|X|O|X|X|X|O|X|X|O|O|X|X|X|
26 046 &  |X|X|O|X|X|X|O|X|X|O|O|X|X|X|
27 047 '  |X|X|O|X|X|X|O|X|X|O|O|X|X|X|
28 050 (  |X|X|O|X|X|X|O|X|X|O|O|X|X|X|
29 051 )  |X|X|O|X|X|X|O|X|X|O|O|X|X|X|
2A 052 *  |X|X|O|X|X|X|O|X|X|O|O|X|X|X|
2B 053 +  |X|X|O|X|X|X|O|X|X|O|O|X|X|X|
2C 054 ,  |X|X|O|X|X|X|O|X|X|O|O|X|X|X|
2D 055 -  |X|X|O|X|X|X|O|X|X|O|O|X|X|X|
2E 056 .  |X|X|O|X|X|X|O|X|X|O|O|X|X|X|
2F 057 /  |X|X|O|X|X|X|O|X|X|O|O|X|X|X|
30 060 0  |O|X|O|X|X|O|O|X|O|O|X|X|X|O|
31 061 1  |O|X|O|X|X|O|O|X|O|O|X|X|X|O|
32 062 2  |O|X|O|X|X|O|O|X|O|O|X|X|X|O|
33 063 3  |O|X|O|X|X|O|O|X|O|O|X|X|X|O|
34 064 4  |O|X|O|X|X|O|O|X|O|O|X|X|X|O|
35 065 5  |O|X|O|X|X|O|O|X|O|O|X|X|X|O|
36 066 6  |O|X|O|X|X|O|O|X|O|O|X|X|X|O|
37 067 7  |O|X|O|X|X|O|O|X|O|O|X|X|X|O|
38 070 8  |O|X|O|X|X|O|O|X|O|O|X|X|X|O|
39 071 9  |O|X|O|X|X|O|O|X|O|O|X|X|X|O|
3A 072 :  |X|X|O|X|X|X|O|X|X|O|O|X|X|X|
3B 073 ;  |X|X|O|X|X|X|O|X|X|O|O|X|X|X|
3C 074 <  |X|X|O|X|X|X|O|X|X|O|O|X|X|X|
3D 075 =  |X|X|O|X|X|X|O|X|X|O|O|X|X|X|
3E 076 >  |X|X|O|X|X|X|O|X|X|O|O|X|X|X|
3F 077 ?  |X|X|O|X|X|X|O|X|X|O|O|X|X|X|
40 100 @  |X|X|O|X|X|X|O|X|X|O|O|X|X|X|
41 101 A  |O|O|O|X|X|X|O|X|X|O|X|X|O|O|
42 102 B  |O|O|O|X|X|X|O|X|X|O|X|X|O|O|
43 103 C  |O|O|O|X|X|X|O|X|X|O|X|X|O|O|
44 104 D  |O|O|O|X|X|X|O|X|X|O|X|X|O|O|
45 105 E  |O|O|O|X|X|X|O|X|X|O|X|X|O|O|
46 106 F  |O|O|O|X|X|X|O|X|X|O|X|X|O|O|
47 107 G  |O|O|O|X|X|X|O|X|X|O|X|X|O|X|
48 110 H  |O|O|O|X|X|X|O|X|X|O|X|X|O|X|
49 111 I  |O|O|O|X|X|X|O|X|X|O|X|X|O|X|
4A 112 J  |O|O|O|X|X|X|O|X|X|O|X|X|O|X|
4B 113 K  |O|O|O|X|X|X|O|X|X|O|X|X|O|X|
4C 114 L  |O|O|O|X|X|X|O|X|X|O|X|X|O|X|
4D 115 M  |O|O|O|X|X|X|O|X|X|O|X|X|O|X|
4E 116 N  |O|O|O|X|X|X|O|X|X|O|X|X|O|X|
4F 117 O  |O|O|O|X|X|X|O|X|X|O|X|X|O|X|
50 120 P  |O|O|O|X|X|X|O|X|X|O|X|X|O|X|
51 121 Q  |O|O|O|X|X|X|O|X|X|O|X|X|O|X|
52 122 R  |O|O|O|X|X|X|O|X|X|O|X|X|O|X|
53 123 S  |O|O|O|X|X|X|O|X|X|O|X|X|O|X|
54 124 T  |O|O|O|X|X|X|O|X|X|O|X|X|O|X|
55 125 U  |O|O|O|X|X|X|O|X|X|O|X|X|O|X|
56 126 V  |O|O|O|X|X|X|O|X|X|O|X|X|O|X|
57 127 W  |O|O|O|X|X|X|O|X|X|O|X|X|O|X|
58 130 X  |O|O|O|X|X|X|O|X|X|O|X|X|O|X|
59 131 Y  |O|O|O|X|X|X|O|X|X|O|X|X|O|X|
5A 132 Z  |O|O|O|X|X|X|O|X|X|O|X|X|O|X|
5B 133 [  |X|X|O|X|X|X|O|X|X|O|O|X|X|X|
5C 134 \  |X|X|O|X|X|X|O|X|X|O|O|X|X|X|
5D 135 ]  |X|X|O|X|X|X|O|X|X|O|O|X|X|X|
5E 136 ^  |X|X|O|X|X|X|O|X|X|O|O|X|X|X|
5F 137 _  |X|X|O|X|X|X|O|X|X|O|O|X|X|X|
60 140 `  |X|X|O|X|X|X|O|X|X|O|O|X|X|X|
61 141 a  |O|O|O|X|X|X|O|O|X|O|X|X|X|O|
62 142 b  |O|O|O|X|X|X|O|O|X|O|X|X|X|O|
63 143 c  |O|O|O|X|X|X|O|O|X|O|X|X|X|O|
64 144 d  |O|O|O|X|X|X|O|O|X|O|X|X|X|O|
65 145 e  |O|O|O|X|X|X|O|O|X|O|X|X|X|O|
66 146 f  |O|O|O|X|X|X|O|O|X|O|X|X|X|O|
67 147 g  |O|O|O|X|X|X|O|O|X|O|X|X|X|X|
68 150 h  |O|O|O|X|X|X|O|O|X|O|X|X|X|X|
69 151 i  |O|O|O|X|X|X|O|O|X|O|X|X|X|X|
6A 152 j  |O|O|O|X|X|X|O|O|X|O|X|X|X|X|
6B 153 k  |O|O|O|X|X|X|O|O|X|O|X|X|X|X|
6C 154 l  |O|O|O|X|X|X|O|O|X|O|X|X|X|X|
6D 155 m  |O|O|O|X|X|X|O|O|X|O|X|X|X|X|
6E 156 n  |O|O|O|X|X|X|O|O|X|O|X|X|X|X|
6F 157 o  |O|O|O|X|X|X|O|O|X|O|X|X|X|X|
70 160 p  |O|O|O|X|X|X|O|O|X|O|X|X|X|X|
71 161 q  |O|O|O|X|X|X|O|O|X|O|X|X|X|X|
72 162 r  |O|O|O|X|X|X|O|O|X|O|X|X|X|X|
73 163 s  |O|O|O|X|X|X|O|O|X|O|X|X|X|X|
74 164 t  |O|O|O|X|X|X|O|O|X|O|X|X|X|X|
75 165 u  |O|O|O|X|X|X|O|O|X|O|X|X|X|X|
76 166 v  |O|O|O|X|X|X|O|O|X|O|X|X|X|X|
77 167 w  |O|O|O|X|X|X|O|O|X|O|X|X|X|X|
78 170 x  |O|O|O|X|X|X|O|O|X|O|X|X|X|X|
79 171 y  |O|O|O|X|X|X|O|O|X|O|X|X|X|X|
7A 172 z  |O|O|O|X|X|X|O|O|X|O|X|X|X|X|
7B 173 {  |X|X|O|X|X|X|O|X|X|O|O|X|X|X|
7C 174 |  |X|X|O|X|X|X|O|X|X|O|O|X|X|X|
7D 175 }  |X|X|O|X|X|X|O|X|X|O|O|X|X|X|
7E 176 ~  |X|X|O|X|X|X|O|X|X|O|O|X|X|X|
7F 177 -- |X|X|O|X|O|X|X|X|X|X|X|X|X|X|


Copyright © Ben Bullock 2009-2023. All rights reserved. For comments, questions, and corrections, please email Ben Bullock (benkasminbullock@gmail.com) or use the discussion group at Google Groups. / Privacy / Disclaimer