8.11.4 比较字符串(1)
我们有一整套比较运算符,用来比较两个字符串对象,或者比较一个字符串对象与一个字符串字面值。string类中对下列运算符实现了运算符重载:
- == != < <= > >=
下面是使用这些运算符的示例:
- string dog1("St Bernard");
- string dog2("Tibetan Mastiff");
- if(dog1 < dog2)
- cout << "dog2 comes first!" << endl;
- else if(dog1 > dog2)
- cout << "dog1 comes first!" << endl;
当比较两个字符串时,实际上是比较对应的字符,直到发现一对不同的字符,或者到达一个或两个字符串的末尾。当发现两个对应字符不相同时,字符代码的值决定比较结果。如果没有发现不同的字符对,那么字符较少的字符串小于另一个字符串。如果两个字符串包含相同的字符个数,而且对应的字符也相同,则这两个字符串相等。
试一试:比较字符串
本例说明了如何用极其低效的排序方法来使用比较运算符。代码如下:
- // Ex8_14.cpp
- // Comparing and sorting words
- #include <iostream>
- #include <iomanip>
- #include <string>
- using std::cin;
- using std::cout;
- using std::endl;
- using std::ios;
- using std::setiosflags;
- using std::setw;
- using std::string;
- string* sort(string* strings, size_t count)
- {
- bool swapped(false);
- while(true)
- {
- for(size_t i = 0 ; i < count-1 ; i++)
- {
- if(strings[i] > strings[i+1])
- {
- swapped = true;
- strings[i].swap(strings[i+1]);
- }
- }
- if(!swapped)
- break;
- swapped = false;
- }
- return strings;
- }
- int main()
- {
- const size_t maxstrings(100);
- string strings[maxstrings];
- size_t nstrings(0);
- size_t maxwidth(0);
- // Read up to 100 words into the strings array
- while(nstrings < maxstrings)
- {
- cout << "Enter a word or press Enter to end: ";
- getline(cin, strings[nstrings]);
- if(maxwidth < strings[nstrings].length())
- maxwidth = strings[nstrings].length();
- if(strings[nstrings].empty())
- break;
- ++nstrings;
- }
- // Sort the input in ascending sequence
- sort(strings,nstrings);
- cout << endl
- << "In ascending sequence, the words you entered are:"
- << endl
- << setiosflags(ios::left); // Left-justify the output
- for(size_t i = 0 ; i < nstrings ; i++)
- {
- if(i % 5 == 0)
- cout << endl;
- cout << setw(maxwidth+2) << strings[i];
- }
- cout << endl;
- return 0;
- }