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