7.14. Character classification¶
It is often useful to examine a character and test whether it is upper
or lower case, or whether it is a character or a digit. C++ provides a
library of functions that perform this kind of character classification.
In order to use these functions, you have to include the header file
cctype.
char letter = 'a';
if (isalpha(letter)) {
cout << "The character " << letter << " is a letter." << endl;
}
You might expect the return value from isalpha to be a bool, but
for reasons I don’t even want to think about, it is actually an integer
that is 0 if the argument is not a letter, and some non-zero value if it
is.
This oddity is not as inconvenient as it seems, because it is legal to
use this kind of integer in a conditional, as shown in the example. The
value 0 is treated as false, and all non-zero values are treated as
true.
Technically, this sort of thing should not be allowed—integers are not the same thing as boolean values. Nevertheless, the C++ habit of converting automatically between types can be useful.
Other character classification functions include isdigit, which
identifies the digits 0 through 9, and isspace, which identifies all
kinds of “white” space, including spaces, tabs, newlines, and a few
others. There are also isupper and islower, which distinguish
upper and lower case letters.
Finally, there are two functions that convert letters from one case to
the other, called toupper and tolower. Both take a single
character as a parameter and return a (possibly converted) character.
char letter = 'a';
letter = toupper (letter);
cout << letter << endl;
The output of this code is A.
As an exercise, use the character classification and conversion library
to write functions named stringToUpper and stringToLower that
take a single string as a parameter, and return a string with all the
characters converted to upper or lower case. The return type
should be string.
Try writing the stringToUpper and stringToLower functions in the
commented sections of the active code below. Both functions take a single string
as a parameter and have return type void. stringToUpper should convert the string
to uppercase, and stringToLower should convert the string to lowercase. Some functions that
you might find useful include isalpha, isupper, islower, toupper, and tolower.
If you get stuck, you can reveal the extra problems at the end for help.
Let’s write the code for the stringToUpper function. stringToUpper
should convert a string to uppercase.
Let’s write the code for the stringToLower function. stringToLower
should convert a string to lowercase.