ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 13.12.2020
Просмотров: 4249
Скачиваний: 28
Часть IV. Стандартная библиотека языка программирования С++
446
s.replace(2, 2, "ccc"); // "--ccc--"
s.replace(2, 3, 2, 'x'); // "--xx--"
string::iterator first0 = s.begin(), last0 = s.end();
s.replace(first0 + 2, last0 - 2, string("aa")); // "--aa--"
s.replace(first0 + 2, last0 - 2, "bb"); // "--bb--"
s.replace(first0 + 2, last0 - 2, "xxxx", 2); // "--xx--"
s.replace(first0 + 2, last0 - 2, 2, 'a'); // "--aa--"
Параметры
first
и
last
шаблонной функции
replace
являются
итераторами строки-заместителя типа
basic_string
и задают в
этой строке подстроку
[first, last)
, которая заменяет подстроку
в исходной строке. Например,
string s("--aa--");
string t("++bb++");
string::iterator first0 = s.begin(), last0 = s.end(),
first = t.begin(), last = t.end();
s.replace(first0 + 2, last0 - 2, first + 2, last - 2);
39.2.19. Копирование подстроки
в массив символов
В шаблоне класса
basic_string
определена функция
copy
:
size_type copy(value_type *s, size_type n,
size_type pos = 0) const;
Она копирует
n
символов из исходной строки, начиная с позиции
pos
, в массив, адрес которого задан параметром
s
. Возвращает
функция количество скопированных элементов. Например:
char buffer[80] = "aa--aa";
string s("-bb-");
s.copy(buffer + 2, 2, 1);
cout << buffer << endl; // aabbaa
Глава 39. Работа со строками в С++ <string>
447
39.2.20. Обмен строк
Для обмена строк в шаблоне класса
basic_string
определена
функция:
void swap(basic_string& str);
Функция обменивает значение исходной строки со значением
строки, заданной параметром
str
.
39.2.21. Поиск символов и подстрок
в строке
Для поиска символов и подстрок в строке в шаблоне класса
basic_string
определены следующие функции:
size_type find(const basic_string& str,
size_type pos = 0) const;
size_type find(const value_type *s, size_type pos,
size_type n) const;
size_type find(const value_type *s,
size_type pos = 0) const;
size_type find(value_type c, size_type pos = 0) const;
size_type rfind(const basic_string& str,
size_type pos = npos) const;
size_type rfind(const value_type *s, size_type pos,
size_type n = npos) const;
size_type rfind(const value_type *s,
size_type pos = npos) const;
size_type rfind(value_type c, size_type pos = npos) const;
size_type find_first_of(const basic_string& str,
size_type pos = 0) const;
size_type find_first_of(const value_type *s,
size_type pos, size_type n) const;
size_type find_first_of(const value_type *s,
size_type pos = 0) const;
size_type find_first_of(value_type c,
size_type pos = 0) const;
size_type find_last_of(const basic_string& str,
size_type pos = npos) const;
Часть IV. Стандартная библиотека языка программирования С++
448
size_type find_last_of(const value_type *s,
size_type pos, size_type n = npos) const;
size_type find_last_of(const value_type *s,
size_type pos = npos) const;
size_type find_last_of(value_type c,
size_type pos = npos) const;
size_type find_first_not_of(const basic_string& str,
size_type pos = 0) const;
size_type find_first_not_of(const value_type *s,
size_type pos, size_type n) const;
size_type find_first_not_of(const value_type *s,
size_type pos = 0) const;
size_type find_first_not_of(value_type c,
size_type pos = 0) const;
size_type find_last_not_of(const basic_string& str,
size_type pos = npos) const;
size_type find_last_not_of(const value_type *s,
size_type pos, size_type n) const;
size_type find_last_not_of(const value_type *s,
size_type pos = npos) const;
size_type find_last_not_of(value_type c,
size_type pos = npos) const;
Эти функции реализуют следующие алгоритмы:
find
— поиск первого символа или подстроки в текущей стро-
ке, начиная с позиции, заданной параметром
pos
, которые рав-
ны заданному символу или подстроке соответственно;
rfind
— обратный поиск, т. е. поиск в обратном направлении,
первого символа или подстроки в текущей строке, начиная с
позиции, заданной параметром
pos
, которые равны заданному
символу или подстроке соответственно;
find_first_of
— поиск первого символа в текущей строке,
начиная с позиции, заданной параметром
pos
, который равен
любому из заданных символов;
find_last_of
— поиск последнего символа в текущей строке
до позиции, заданной параметром
pos
, который равен любому
из заданных символов;
Глава 39. Работа со строками в С++ <string>
449
find_first_not_of
— поиск первого символа в текущей строке,
начиная с позиции, заданной параметром
pos
, который не ра-
вен ни одному из заданных символов;
find_last_not_of
— поиск последнего символа в текущей
строке до позиции, заданной параметром
pos
, который не ра-
вен ни одному из заданных символов.
Все эти функции в случае удачи возвращают позицию найденно-
го символа, а в случае неудачи — значение
npos
.
Параметры функций поиска имеют следующее назначение:
pos
— указывает на позицию символа в исходной строке, с
которой начинается поиск;
n
— задает количество последовательных символов в заданной
строке, поиск которых выполняется в исходной строке.
Остальные параметры задают строку или символ, которые ищут-
ся в исходной строке. Например:
string s("--abc--");
cout << s.find(string("abc")) << endl; // 2
cout << s.find("abc") << endl; // 2
cout << s.find("c-b-a", 1, 2) << endl; // 4
cout << s.find('a') << endl; // 2
39.2.22. Выделение подстроки
Для выделения из исходной строки подстроки в шаблоне класса
basic_string
определена функция:
basic_string substr(size_type pos = 0,
size_type n = npos) const;
Функция
substr
возвращает подстроку, которая начинается в ис-
ходной строке с позиции, заданной параметром
pos
, и имеет дли-
ну равную значению параметра
n
. Например:
string s("--abc--");
cout << s.substr(2, 3) << endl; // abc
Часть IV. Стандартная библиотека языка программирования С++
450
39.2.23. Сравнение строк
Для сравнения строки типа
basic_string
с другой строкой этого
типа или со строкой языка программирования С в шаблоне класса
basic_string
перегружены функции
compare
:
int compare(const basic_string& str) const;
int compare(size_type p0, size_type n0,
const basic_string& str);
int compare(size_type p0, size_type n0,
const basic_string& str, size_type pos, size_type n);
int compare(const value_type *s) const;
int compare(size_type p0, size_type n0,
const value_type *s) const;
int compare(size_type p0, size_type n0,
const value_type *s, size_type pos) const;
Все эти функции возвращают следующие значения:
меньше нуля — если строки не совпадают и первый несовпа-
дающий символ исходной строки меньше символа заданной
строки, с которым он сравнивается;
ноль — если строки совпадают;
больше нуля — если первый несовпадающий символ исходной
строки больше символа заданной строки, с которым он срав-
нивается.
Параметры функций
compare
имеют следующее назначение:
p0
— задает позицию в исходной строке, с которой начинается
сравнение;
n0
— задает количество сравниваемых символов.
Если эти параметры не заданы, то сравнивается вся строка. Ос-
тальные параметры задают строку, с которой выполняется срав-
нение. Например:
string s("-aa-");
cout << s.compare(s) << endl; // 0
cout << s.compare(1, 2, "aa") << endl; // 0
cout << s.compare(1, 2, "+aa+", 1, 2) << endl; // 0