// Table-driven word count program. // Intended to duplicate the behavior of // justcount.c but be faster. #include #include int main(int argc, char **argv) { unsigned char buf[128]; int n = 0; char isalpha[256] = {0}; for (int i = 'a'; i <= 'z'; i++) { isalpha[i] = 1; isalpha[i + 'A' - 'a'] = 1; } char isnonalpha[256] = {0}; for (int i = 0; i != 256; i++) { isnonalpha[i] = !isalpha[i]; } isnonalpha['\0'] = 0; for (;;) { if (!fgets((char*)buf, sizeof buf, stdin)) break; for (unsigned char *q = buf;;) { while (isnonalpha[*q]) q++; if (!*q) break; while (isalpha[*q]) q++; n++; } } printf("%d total words\n", n); return 0; }