#include /* for printf in C programs */ int isletter(char c) { c &= 0xdf; /* make uppercase */ return 'A' <= c && c <= 'Z' ; } int countwords(char* str) /* count words in a string */ { int state = 1; /* FSM state 1=no word, 2=word in progress */ int count = 0; /* count of words in string */ char ch; /* each character */ while (ch = *str++) /* go through string */ switch (state) { case 1: if (isletter(ch)) /* letter starts a word */ { count++; /* count it */ state = 2; /* and change state */ } break; case 2: if (ch == ' ') {state = 1;} } return count; } int main (int argc, char* argv[]) { int cnt; if (argc != 2) { printf("Usage: countwds \'Some sentence here \'\n"); return 1; } cnt = countwords(argv[1]); printf(" %d words\n", cnt); return 0; }