diff options
| author | zlg <zlg@zlg.space> | 2017-02-27 01:20:38 -0800 | 
|---|---|---|
| committer | zlg <zlg@zlg.space> | 2017-02-27 01:20:38 -0800 | 
| commit | fcfb2db63b01f209fb2c8fdc500023241435377f (patch) | |
| tree | 14ba7ef578cedc78995985921742f5de6fe9c428 /ch7 | |
| parent | Solve Exercise 7-8: Paged file print-outs (diff) | |
| download | knr-fcfb2db63b01f209fb2c8fdc500023241435377f.tar.gz knr-fcfb2db63b01f209fb2c8fdc500023241435377f.tar.bz2 knr-fcfb2db63b01f209fb2c8fdc500023241435377f.tar.xz knr-fcfb2db63b01f209fb2c8fdc500023241435377f.zip | |
Solve Exercise 7-9: isupper, time, and space
Diffstat (limited to '')
| -rw-r--r-- | ch7/7-09_isupper-time-space.c | 32 | 
1 files changed, 32 insertions, 0 deletions
| diff --git a/ch7/7-09_isupper-time-space.c b/ch7/7-09_isupper-time-space.c new file mode 100644 index 0000000..bc96551 --- /dev/null +++ b/ch7/7-09_isupper-time-space.c @@ -0,0 +1,32 @@ +#include <stdio.h> +#include <string.h> /* 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; +} | 
