Section 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.
Checkpoint 7.14.1.
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 hint after the problem for help.
Hint 1.
Activity 7.14.1.
Letβs write the code for the
stringToUpper function.
stringToUpper should convert a string to uppercase.
string stringToUpper(string input) {
---
void stringToUpper(string input) { #paired
---
size_t i = 0;
---
while (i < input.length()) {
---
while (i > input.length()) { #paired
---
if (isalpha(input[i]) && islower(input[i])) {
---
if (isalpha(input[i]) || islower(input[i])) { #paired
---
input[i] = toupper(input[i]));
---
}
i++;
}
---
return result;
---
}
Hint 2.
Activity 7.14.2.
Letβs write the code for the
stringToLower function.
stringToLower should convert a string to lowercase.
string stringToLower(string input) {
---
void stringToLower(string input) { #paired
---
size_t i = 0;
---
while (i < input.length()) {
---
while (i > input.length()) { #paired
---
if (isalpha(input[i]) && isupper(input[i])) {
---
if (isalpha(input[i]) && isupper(input[i])) { #paired
---
input[i] = tolower(input[i]);
---
}
i++;
}
---
return input;
---
}
You have attempted
of
activities on this page.