aboutsummaryrefslogtreecommitdiff
path: root/ch7/7-09_isupper-time-space.c
blob: bc965519faff4ffbe893a6139c8de2b794cc88cf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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;
}