Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии 


При выполнении эта программа генерирует такие результаты.




Класс 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





Читайте также:

  1. A. Притяжения и отталкивания, силы отталкивания больше на малых расстояниях, чем силы притяжения. Б. Притяжения и отталкивания, силы отталкивания меньше на малых расстояниях, чем силы притяжения.
  2. Adjective and adverb. Имя прилагательное и наречие. Степени сравнения.
  3. B. 1. В США говорят по-английски. 2. Эта сумка сделана из кожи. 3. Окно разбито. 4. Владимир был построен в 10 веке. 5. Масло и сыр делают из молока. 6.Этот дом был построен моим дедом.
  4. D. Правоспособность иностранцев. - Ограничения в отношении землевладения. - Двоякий смысл своего и чужого в немецкой терминологии. - Приобретение прав гражданства русскими подданными в Финляндии
  5. D. ПРЕИМУЩЕСТВА ПРИСОЕДИНЕНИЯ К ГААГСКОМУ СОГЛАШЕНИЮ
  6. F70.99 Умственная отсталость легкой степени без указаний на нарушение поведения, обусловленная неуточненными причинами
  7. F71.98 Умственная отсталость умеренная без указаний на нарушение поведения, обусловленная другими уточненными причинами
  8. I Использование заемных средств в работе предприятия
  9. I ЭТАП (1-3 ст.) ОВОДНЕНИЕ ИКРИНКИ И ПОЯВЛЕНИЕ БЛАСТОДИСКА
  10. I этап. Теория рыночных структур (1880-1910 гг.)
  11. I. Методические принципы физического воспитания (сознательность, активность, наглядность, доступность, систематичность)
  12. I. О НОВОПРИБЫВШИХ ГРАЖДАНАХ.


Последнее изменение этой страницы: 2016-03-17; Просмотров: 213; Нарушение авторского права страницы


lektsia.com 2007 - 2018 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.012 с.) Главная | Обратная связь