#include #include /* strchr */ /* The C Programming Language: 2nd Edition * * Exercise 7-9: Functions like `isupper` can be implemented to save space * or to save time. Explore both possibilities. * * Notes: I'm not really sure what they're expecting here. Assuming standard * ASCII, the only uppercase characters are A-Z, and they're all sequential. * Both ways to check seem very lean on necessary resources; I'm unaware of * other methods. */ int isupper_small(int c) { return (c >= 'A' && c <= 'Z'); } int isupper_fast(int c) { return (strchr("ABCDEFGHIJKLMNOPQRSTUVWXYZ", c) != NULL); } int main(int argc, char **argv) { int c = 'S'; /* The inline conditional makes things more "human-friendly". */ printf("is '%c' uppercase? %c\n", c, isupper_fast(c) ? 'y' : 'n'); c = 'f'; printf("...what about '%c'? %c\n", c, isupper_small(c) ? 'y' : 'n'); c = ':'; printf("Does a colon have an uppercase variant? %c\n", isupper_small(c) ? 'y' : 'n'); return 0; }