Конструкторы и присваивание строк
В классе string определено несколько конструкторов:
srting ( ); // создает пустой объект типа string
string (const *char); // создает объект типа “строка” на основе строки
// старого стиля
string (const *char, int n); // создает объект типа string и записывает туда
// n символов из строки, указанной
// первым параметром
string (string &); // конструктор копирования, создающий новый объект
// как копию объекта, переданного ему в качестве параметра
В классе string определены три операции присваивания:
string & operator = (const string & str);
string & operator = (const char * s);
string & operator = (char c);
Примеры
string s1;
string s2 (“Вася”);
string s3 (s2);
s1 = ‘x’;
s2 = s3;
Операции
Ниже приведены операции со строками.
Операция | Действие |
= | Присваивание |
+ | Конкатенация |
= = | Равенство |
! = | Неравенство |
< | Меньше |
< = | Меньше или равно |
> | Больше |
> = | Больше или равно |
[ ] | Индексация |
<< | Вывод |
>> | Ввод |
+ = | Добавление |
Для строк типа string не соблюдается соответствие между адресом первого элемента строки и именем, как это было в случае строк старого стиля, т.е. &s[0] не равно s.
Кроме операции индексации для доступа к элементу строки определена функция at:
string s(“Вася”);
cout << s.at (1); // будет выведен символ а
Функции
Присваивание и добавление частей строк
Для присваивания части одной строки другой служит функция assign:
assign (const string & str);
assign (const string & str, size_type pos, size_type n);
assign (const char * str, size_type n);
Первая функция присваивает строку str вызывающей строке (эквивалент операции присваивания):
string s1 (“Вася”), s2;
s2.assign (s1);
Вторая функция присваивает вызывающей строке часть строки str, начиная с позиции pos. Если pos больше длины строки, порождается исключение out_of_range. Вызывающей строке присваивается n символов либо, если pos больше длины строки str, – все символы до конца строки str.
Третья функция присваивает вызывающей строке n символов строки s старого типа.
Для добавления части одной строки к другой служит функция append:
append (const string & str);
append (const string & str, size_type pos, size_type n);
append (const char* s, size_type n);
Первая функция добавляет строку str к вызывающей строке (эквивалент операции +).
Вторая функция добавляет к взывающей строке часть строки str, начиная с позиции pos.
Третья функция добавляет к вызывающей строке n символов строки s старого типа.
Преобразование строк
Для вставки в одну строку части другой строки служит функция insert:
insert (size_type pos1, const string & str);
insert (size_type pos1, const string & str, size_type pos2, size_type n );
insert (size_type pos, const char* s, size_type n );
Первая функция вставляет строку str в вызывающую строку, начиная с позиции pos1 вызывающей строки (т.е. взывающая строка замещается строкой str, наичная с позиции pos1, а после str располагаются остальные символы вызывающей строки).
Вторая функция вставляет в вызывающую строку, начиная с позиции pos1, часть строки str длиной n символов, начиная с позиции pos2.
Третья функция вставляет в вызывающую строку n элементов строки старого типа, начиная с позиции pos вызывающей строки.
Для удаления части строки служит функция erase:
erase (size_type pos = 0, size_type n = pos);
Функция удаляет из вызывающей строки n элементов, начиная с позиции pos. Если pos не указана, элементы удаляются с начала строки.
Очистку всей строки можно выполнить с помощью функции clear:
void clear ( );
Для замены части строки служит функция replace:
replace (size_type pos1, size_type n1,const string & str);
replace (size_type pos1, size_type n1,const string & str, size_type pos2, size_type n2);
Здесь pos1 – позиция вызывающей строки, начиная с которой выполняется замена; n1 – количество удаляемых элементов, pos2 – позиция строки str, начиная с которой она вставляется в вызывающую строку; n2 – количество вставляемых элементов строки str.
Третья форма функции:
replace (size_type pos1, size_type n1,const char* s, size_type n2);
позволяет заменить n1 символов вызывающей строки на n2 символов строки старого типа s.
Для обмена содержимого двух строк служит функция swap:
swap (string & s);
Для выделения части строки служит функция substr:
substr (size_type pos = 0, size_type n = npos);
Эта функция возвращает подстроку вызывающей строки длиной n символов, начиная с позиции npos.
Для преобразования объектов типа string в строки старого стиля используется функция c_str:
const char* c_str ( ) const;
Функция возвращает константный указатель на оканчивающуюся нуль-символом строку.
Примеры
String s1 (“прекрасная королева”), s2 (“ле”), s3(“корова”);
cout << s3.insert (4, s2) << endl; // получится: королева
cout << s3.insert (7, “к”) << endl; // получится: королевка
s1.erase (0,3); // получится: s1=”красная королева”
cout << s1.erase (12, 2) << endl; // получится: красная корова
Поиск подстрок
Для поиска подстрок в классе string предусмотрено большое разнообразие функций. Рассмотрим некоторые их них:
size_type find (const string & str, size_type pos = 0) const;
ищет самое левое вхождение строки str в вызывающую строку, начиная с позиции pos, и возвращает позицию в строке или число npos (максимальное число типа size_type), если строка не найдена.
size_type find (const char с, size_type pos = 0) const;
ищет самое левое вхождение символа c в вызывающую строку, начиная с позиции pos, и возвращает позицию в строке или число npos, если строка не найдена.
size_type rfind (const string & str, size_type pos = npos) const;
ищет самое правое вхождение строки str в вызывающую строку до позиции pos и возвращает позицию в строке или число npos, если строка не найдена.
size_type rfind (const char c, size_type pos = 0) const;
ищет самое правое вхождение символа c в вызывающую строку, до позиции pos и возвращает позицию в строке или число npos, если строка не найдена.
Примеры
int i, j;
string s1 (“лесная королева”), s2 (“ле”);
i = s1.find (s2);
j = s1.rfind (s2);
cout << “Первое вхождение S2 в S1 ” << i<< endl;
cout << “Последнее вхождение S2 в S1 “ << j<< endl;
На экране получится:
Первое вхождение S2 в S1 0
Последнее вхождение S2 в S1 11
Сравнение частей строк
Для сравнения частей строк используется функция compare (для сравнения сторк целиком применяются перегруженные операции отношения):
int compare (const string & str) const;
int compare (size_type pos1, size_type n1, const string & str) const;
int compare (size_type pos1, size_type n1, const string & str, size_type pos2, size_type n2) const;
Первая форма функции сравнивает две строки целиком и возвращает значение меньше нуля, если вызывающая строка “меньше” str, равное нулю, если строки одинаковы, и больше нуля, если вызывающая строка “больше”. Здесь “больше” или “меньше” означает сраинение букв по старшинству (порядку), т.е. “aa” и “aa” равны, “аб” и “ав” – вторая строка “больше” и т.п.
Вторая форма функции выполняет аналогичные действия, но сравнивает со строкой str n1 символов вызывающей строки, начиная с позиции pos1.
Третья форма функции сравнивает n1 символов вызывающей строки, начиная с позиции pos1, с подстрокой строки str длиной n2 символов, начиная с позиции pos2.