Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
При выполнении эта программа генерирует такие результаты.
Класс string позволяет эффективно Класс string позволяет эффективно Класс string позволяет эффективно обрабатывать строки. str3 > str1 str3 == str1+str2 Это строка с завершающим нулем. Это строка с завершающим нулем. Введите строку: Привет Привет Обратите внимание на то, как легко теперь выполняется обработка строк. Например, оператор " +" используется для конкатенации строк, а оператор " > " — для сравнения двух строк. Для выполнения этих операций с использованием С-стиля обработки строк, т.е. использования строк с завершающим нулем, пришлось бы применять менее удобные средства, а именно вызывать функции strcat() и strcmp(). Поскольку С++-объекты типа string можно свободно смешивать с С-строками, их (string-объекты) можно использовать в любой программе не только безо всякого ущерба для эффективности, но даже с заметным выигрышем. Важно также отметить, что в предыдущей программе размер строк не задается. Объекты типа string автоматически получают размер, нужный для хранения заданной строки. Таким образом, при выполнении операций присваивания или конкатенации строк строка-приемник увеличится по длине настолько, насколько это необходимо для хранения нового содержимого строки. При обработке string-объектов невозможно выйти за границы строки. Именно этот динамический аспект string-объектов выгодно отличает их от строк с завершающим нулем (которые часто страдают от нарушения границ). Обзор функций-членов класса string Если самые простые операции со строками можно реализовать с помощью операторов, то при выполнении более сложных не обойтись без функций-членов класса string. Класс string содержит слишком много функций-членов, мы же рассмотрим здесь только самые употребительные из них. Важно! Поскольку класс string— контейнер, он поддерживает такие обычные контейнерные функции, как begin(), end() и size(). Основные манипуляции над строками Чтобы присвоить одну строку другой, используйте функцию assign(). Вот как выглядят два возможных формата ее реализации. string & assign(const string & strob, size_type start, size_type num); string & assign(const char *str, size_type num); Первый формат позволяет присвоить вызывающему объекту num символов из строки, заданной параметром strob, начиная с индекса start. При использовании второго формата вызывающему объекту присваиваются первые num символов строки с завершающим нулем, заданной параметром str. В каждом случае возвращается ссылка на вызывающий объект. Конечно, гораздо проще для присвоения одной полной строки другой использовать оператор " =" . О функции-члене assign() вспоминают, в основном, тогда, когда нужно присвоить только часть строки. С помощью функции-члена append() можно часть одной строки присоединить в конец другой. Два возможных формата ее реализации имеют следующий вид. string & append(const string & strob, size_type start, size_type num); string & append(const char *str, size_type num); Здесь при использовании первого формата num символов из строки, заданной параметром strob, начиная с индекса start, будет присоединено в конец вызывающего объекта. Второй формат позволяет присоединить в конец вызывающего объекта первые num символов строки с завершающим нулем, заданной параметром str. В каждом случае возвращается ссылка на вызывающий объект. Конечно, гораздо проще для присоединения одной полной строки в конец другой использовать оператор Функция же append() применяется тогда, когда необходимо присоединить в конец вызывающего объекта только часть строки. Вставку или замену символов в строке можно выполнять с помощью функций-членов insert() и replace(). Вот как выглядят прототипы их наиболее употребительных форматов. string & insert(size_type start, const string & strob); string & insert(size_type start, const string & strob, size_type insStart, size_type num); string & replace(size_type start, size_type num, const string & strob); string & replace(size_type start, size_type orgNum, const string & strob, size_type replaceStart, size_type replaceNum); Первый формат функции insert() позволяет вставить строку, заданную параметром strob, в позицию вызывающей строки, заданную параметром start. Второй формат функции insert() предназначен для вставки num символов из строки, заданной параметром strob, начиная с индекса insStart, в позицию вызывающей строки, заданную параметром start. Первый формат функции replace() служит для замены num символов в вызывающей строке, начиная с индекса start, строкой, заданной параметром strob. Второй формат позволяет заменить orgNum символов в вызывающей строке, начиная с индекса start, replaceNum символами строки, заданной параметром strob, начиная с индекса replaceStart. В каждом случае возвращается ссылка на вызывающий объект. Удалить символы из строки можно с помощью функции erase(). Один из ее форматов выглядит так: string & erase(size_type start = 0, size_type num = npos); Эта функция удаляет num символов из вызывающей строки, начиная с индекса start. Функция возвращает ссылку на вызывающий объект. Использование функций insert(), erase() и replace() демонстрируется в следующей программе. // Демонстрация использования функций insert(), erase() и replace(). #include < iostream> #include < string> using namespace std; Int main() { string str1(" Это простой тест." ); string str2(" ABCDEFG" ); cout < < " Исходные строки: "; cout < < " str1: " < < str1 < < endl; cout < < " str2: " < < str2 < < " "; // Демонстрируем использование функции insert(). cout < < " Вставляем строку str2 в строку str1: "; str1.insert(5, str2); cout < < str1 < < " "; // Демонстрируем использование функции erase(). cout < < " Удаляем 7 символов из строки str1: "; str1.erase(5, 7); cout < < str1 < < " "; // Демонстрируем использование функции replace(). cout < < " Заменяем 2 символа в str1 строкой str2: "; str1.replace(5, 2, str2); cout < < str1 < < endl; return 0; } Результаты выполнения этой программы таковы. Исходные строки: Str1: Это простой тест. Str2: ABCDEFG Вставляем строку str2 в строку str1: Это пABCDEFGростой тест. Удаляем 7 символов из строки str1: Это простой тест. Заменяем 2 символа в str1 строкой str2: Это пABCDEFGстой тест. Поиск в строке В классе string предусмотрено несколько функций-членов, которые осуществляют поиск. Это, например, такие функции, как find() и rfind(). Рассмотрим прототипы самых употребительных версий этих функций. size_type find(const string & strob, size_type start=0) const; size_type rfind(const string & strob, size_type start=npos) const; Функция find(), начиная с позиции start, просматривает вызывающую строку на предмет поиска первого вхождения строки, заданной параметром strob. Если поиск успешен, функция find() возвращает индекс, по которому в вызывающей строке было обнаружено совпадение. Если совпадения не обнаружено, возвращается значение npos. Функция rfind() выполняет то же действие, но с конца. Начиная с позиции start, она просматривает вызывающую строку в обратном направлении на предмет поиска первого вхождения строки, заданной параметром strob (т.е. она находит в вызывающей строке последнее вхождение строки, заданной параметром strob). Если поиск прошел удачно, функция rfind() возвращает индекс, по которому в вызывающей строке было обнаружено совпадение. Если совпадения не обнаружено, возвращается значение npos. Рассмотрим короткий пример использования функции find(). #include < iostream> #include < string> using namespace std; Int main() { int i; string s1 =" Класс string облегчает обработку строк."; string s2; i = s1.find(" string" ); if(i! = string:: npos) { cout < < " Совпадение обнаружено в позиции " < < i< < endl; cout < < " Остаток строки таков: "; s2.assign (s1, i, s1.size()); cout < < s2; } return 0; } Программа генерирует такие результаты. Совпадение обнаружено в позиции 6 Популярное:
|
Последнее изменение этой страницы: 2016-03-17; Просмотров: 1231; Нарушение авторского права страницы