|
Программирование >> Операторы преобразования типа
Преобразование всех символов к нижнему регистру transform (s.beginO. s.endO. Источник S.beginO. Приемник tolower); Операция cout lowered; s endl; Преобразование всех символов к верхнему регистру transform (s.beginO, s.endO. Источник S.beginO. Приемник toupper); Операция cout uppered: s endl; Результат вьтолнения программы выглядит так: original: The zip code of Hondelage in Germany is 38108 lowered: the zip code of hondelage in germany is 38108 uppered: THE ZIP CODE OF HONDELAGE IN GERMANY IS 38108 Обратите внимание на устаревшие функции tolower() и toupper() языка С, использующие универсальный локальный контекст. При работе с другими локальными контекстами следует задействовать новые формы функций tolower() и toupper(). Подробности приводятся на с. 689. Следующий пример показывает, как при помощи STL задать собственные критерии поиска и сортировки. В этом примере производится поиск и сравнение строк без учета регистра символов. str1ng/iter2.cpp #include <string> #include <iostream> #include <algorithm> using namespace std: bool nocase compare (char cl. char c2) { return toupper(cl) == toupper(c2); Int main() { string si( This is a string ): string s2( STRING ); Сравнение строк без учета регистра символов if (si.SizeO = s2.size() && Проверить совпадение размеров equal (si.beginO.si.endO. Первая строка s2.beginO. Вторая строка nocase compare)) { Критерий сравнения cout the strings are equal endl; else { cout the strings are not equal endl; Поиск без учета регистра символов string::1terator pos; pos = search (si.beginO.si,endO. Строка, в которой ведется поиск s2.beginO .s2.endO. Искомая подстрока nocase conipare); Критерий сравнения if (pos == sl.endO) { cout s2 is not a substring of si endl; else { cout s2 \ is a substring of \ si \ (at index pos - si.beginO ) endl; Перед вызовом equal() нужно проследить за тем, чтобы количество элементов во втором интервале было но крайней мере не меньше, чем в первом. Этим объясняется необходимость сравнения размеров; без этой проверки возможны непредсказуемые последствия. В последней команде вывода индекс символа вычисляется как разность двух итераторов: pos - si.beginO Такой способ вычисления работает, потому что строковые итераторы являются итераторами произвольного доступа. Преобразование индекса в итератор производится аналогично - достаточно просто прибавить значение индекса. В приведенном примере определяется вспомогательная функция nocase compareO, сравнивающая строки без учета регистра символов. Вместо нее также можно было бы воспользоваться комбинацией функциональных адаптеров и заменить вызов nocase compare следующим выражением: compose f gx hy(equal to<int>0. ptr fun(toupper), ptr fun(toupper)) За дополнительной информацией обращайтесь на с. 310 и 318. При хранении строк в множествах или отображениях может потребоваться специальный критерий сортировки строк без учета регистра символов. На с. 218 приведен пример определения такого критерия. В следующей программе приводятся другие примеры строковых операций с применением итераторов; string/iter3.cpp #include <string> #include <iostream> #1nclucle <algor1thm> using namespace std: Int mainO { Создание константной строки const string helloCHello. how are you? ); Инициализация строки s всеми символами строки hello string s(hello.begInO.hello.endO); Перебор всех символов string:;iterator pos; for (pos = S.beginO; pos И s.endO; ++pos) { cout *pos: cout endl; Перестановка символов строки в обратном порядке reverse (s.beginO. s.endO): cout reverse: s end1: Сортировка всех символов строки sort (S.beginO. s.endO); cout ordered: s endl; /* Удаление смежных дубликатов * - uniqueO изменяет очередность символов и возвращает новый конец * - eraseO удаляет лишние символы */ S.erase (un1que(s.beginO. S.endO). S.endO): cout no duplicates: s endl: Результат выполнения программы выглядит так: Hello, how are you? reverse ordered no duplicates: .?Haehloruwy ?uoy era woh .olleH .?Haeehlloooruwy В следующем примере содержимое строки читается из стандартного входного потока данных с использованием конечных итераторов вставки: string/unique.срр #include <iostream> #1nclude <string> #include <algorithm> #1nclude <locale>
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |