Глава 21. Понятие строк в ANSI С и ANS! C++_________________________573
Во втором операторе проверяется меньше ли firstAlterString, чем secondAlterString. Это действительно так, даже на основании первого символа, потому что 1 меньше, чем 2 (результатом сравнения будет 1, означающая истинность утверждения). Если бы даже обе строки начинались с 1, то все равно строка firstAlterString была бы признана меньшей, чем secondAlterString. Почему? Символ "с" в слове строка меньше, чем "т" в слове тоже.
В третьем операторе используется немного другой метод сравнения —
ФУНКЦИЯ compare. ФУНКЦИЯ compare, Как И ФУНКЦИЯ strcmp В ANSI С,
возвращает целое число, меньшее нуля, если первая строка меньше, чем вторая, ноль, если строки одинаковы, и целое число, большее нуля, если первая строка больше, чем вторая. Принимая это во внимание, можно ожидать отрицательное значение, поскольку уже было определено, что firstAlterString меньше, чем secondAlterString. Фактический результат будет -1, потому что 1—2 равняется -1. Если.бы различие между отличающимися символами было больше, то результатом было бы целое число, меньшее -1. Хоть и в редких случаях, но это все-таки может быть действительно полезным.
В заключение друг за другом вызываются функции remove и compare. При удалении трех символов из firstAlterString, начиная с нулевого, получается результат: "Эта строка будет подменена". Последующее сравнение этой новой строки с тремя символами из secondAlterString, начиная с третьего символа, дает нулевой результат, означающий равенство. Почему? Отсчитайте три символа из строки firstAlterString, начиная с третьего символа ("эта").
А какие Первые Три СИМВОЛа СТрОКИ firstAlterString? "Эта".
Поиск в строковом классе
Сравнимой по важности с функцией сравнения является функция поиска. В строковом классе существует два типа поиска. Первый, наиболее прямолинейный, состоит в использовании функций find (поиск от начала строки) и rfind (поиск от конца строки).
Пусть имеются следующие две строки:
string targetStringC'BoT цель наших поисков — поиск и еще раз поиск!");
string searchStringC'uenb") ;
Попытайтесь предсказать результат выполнения следующих операторов:
cout « targetString.find(searchString) « endl;
cout « targetString.findfsearchString, 9) « endl;
cout « targetString.find("поиск") « endl;
cout « targetString.rfind("поиск") « endl;
В первом операторе производится поиск строки searchString ("цель") в строке targetString (от начала). Слово "цель" действительно содержится в