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;
}
|