7.13. string
s are comparable¶
All the comparison operators that work on int
s and double
s
also work on strings
.
Take a look at the active code below, which checks to see if word
is
equal to "banana"
.
The same rules and limitations that apply to the +
operator
apply to the relational comparison operators.
In order to work correctly, at least one of the operands must
be a std::string
.
C strings by themselves are not comparable.
These comparisons work because one of the operands is a std::string
.
The other comparison operations are useful for putting words in alphabetical order.
The active code below uses comparison operators to determine the ordering
of word
relative to "banana"
.
You should be aware, though, that the string
class does not handle
upper and lower case letters the same way that people do. All the upper
case letters come before all the lower case letters. As a result,
Your word, Zebra, comes before banana.
A common way to address this problem is to convert strings to a standard format, like all lower-case, before performing the comparison. The next sections explains how. I will not address the more difficult problem, which is making the program realize that zebras are not fruit.
Sometimes we want to print the result of a comparison operation.
When we use cout
to print the value, we don’t get what we expect.
Print a simple boolean value resulting from a string comparison.
The bool
value is actually getting converted to an integer
when processed by the cout
class.
In order to get the results we expect, we need to use the
input / output manipulation library: iomanip
.
The I/O manipluator boolalpha
can display the boolean
values as the words true
or false
.
- true
- Both match up to the g but Dog is shorter than Doghouse so it comes first in the dictionary.
- false
- Strings are compared character by character.
Q-5: What would the result of the following comparison be?
std::string a = "Dog";
std::string b = "Doghouse";
a < b;
- true
- d is greater than D
- false
- Yes, upper case is less than lower case according to the ordinal values of the characters.
- They are the same word
- C++ is case sensitive meaning that upper case and lower case characters are different.
Q-6: What would the result of the following comparison be?
std::string a = "dog";
std::string b = "Dog";
a < b;
- true
- d is greater than D.
- false
- The length does not matter. Lower case d is greater than upper case D.
Q-7: What would the result of the following comparison be?
std::string a = "dog";
std::string b = "Doghouse";
a < b;
- true
- They are equal so one can't be greater than the other.
- false
- Correct! because they are equal. They are equal because all characters match.
Q-8: What would the result of the following comparison be?
std::string a = "bread";
std::string b = "bread";
a < b;