ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 13.12.2020
Просмотров: 4248
Скачиваний: 28
Глава 39. Работа со строками в С++ <string>
451
39.2.24. Получение распределителя памяти
для символа
В шаблоне класса
basic_string
определена функция:
allocator_type get_allocator() const;
Она возвращает распределитель памяти для символов, из кото-
рых состоит строка.
39.3. Шаблоны операторов
39.3.1. Соединение строк
Для соединения строки типа
basic_string
со строкой этого же
типа, строкой языка программирования C или символом в заголо-
вочном файле string перегружен шаблон оператора
+
:
namespace std
{
template<class E, class T, class A>
basic_string<E, T, A> operator+(
const basic_string<E, T, A>& lhs,
const basic_string<E, T, A>& rhs);
template<class E, class T, class A>
basic_string<E, T, A> operator+(
const basic_string<E, T, A>& lhs, const E *rhs);
template<class E, class T, class A>
basic_string<E, T, A> operator+(
const basic_string<E, T, A>& lhs, E rhs);
template<class E, class T, class A>
basic_string<E, T, A> operator+( const E *lhs,
const basic_string<E, T, A>& rhs);
template<class E, class T, class A>
basic_string<E, T, A> operator+( E lhs,
const basic_string<E, T, A>& rhs);
}
Например:
cout << (string("-a") + string("b-")) << endl; // -ab-
cout << (string("-a") + "b-") << endl; // -ab-
cout << (string("-a") + 'b' + '-') << endl; // -ab-
Часть IV. Стандартная библиотека языка программирования С++
452
39.3.2. Сравнение строк
Для сравнения строк типа
basic_string
в заголовочном файле
string перегружены следующие операторы сравнения:
namespace std
{
template<class E, class T, class A>
bool operator==(const basic_string<E, T, A>& lhs,
const basic_string<E, T, A>& rhs);
bool operator!=(const basic_string<E, T, A>& lhs,
const basic_string<E, T, A>& rhs);
template<class E, class T, class A>
bool operator<(const basic_string<E, T, A>& lhs,
const basic_string<E, T, A>& rhs);
template<class E, class T, class A>
bool operator>(const basic_string<E, T, A>& lhs,
const basic_string<E, T, A>& rhs);
template<class E, class T, class A>
bool operator<=(const basic_string<E, T, A>& lhs,
const basic_string<E, T, A>& rhs);
template<class E, class T, class A>
bool operator>=(const basic_string<E, T, A>& lhs,
const basic_string<E, T, A>& rhs);
}
Эти операторы сравнения выполняют следующие действия:
==
— лексикографически сравнивает строки типа
basic_string
,
если строки совпадают, то оператор возвращает значение
true
,
в противном случае —
false
;
!=
— лексикографически сравнивает строки типа
basic_string
,
если строки не совпадают, то оператор возвращает значение
true
, в противном случае —
false
;
<
— лексикографически сравнивает строки типа
basic_string
,
если строка
lhs
меньше строки
rhs
, то оператор возвращает
значение
true
, в противном случае —
false
;
>
— лексикографически сравнивает строки типа
basic_string
,
если строка
lhs
больше строки
rhs
, то оператор возвращает
значение
true
, в противном случае —
false
;
Глава 39. Работа со строками в С++ <string>
453
<=
— лексикографически сравнивает строки типа
basic_string
,
если строка
lhs
не больше строки
rhs
, то оператор возвращает
значение
true
, в противном случае —
false
;
>=
— лексикографически сравнивает строки типа
basic_string
,
если строка
lhs
не меньше строки
rhs
, то оператор возвращает
значение
true
, в противном случае —
false
.
Шаблоны операторов сравнения также перегружены для сравне-
ния строки типа
basic_string
со строкой языка программирова-
ния С. Например, для оператора сравнения на равенство пере-
гружены следующие шаблоны:
namespace std
{
template<class E, class T, class A>
bool operator==(const basic_string<E, T, A>& lhs,
const E *rhs);
template<class E, class T, class A>
bool operator==(const E *lhs,
const basic_string<E, T, A>& rhs);
}
Шаблоны остальных операторов сравнения строк типа
basic_string
со строками языка программирования С перегруже-
ны аналогично.
Ниже приведены примеры сравнения строк:
cout << (string("aa") <= string("ab")) << endl; // 1
cout << (string("aa") == "aa") << endl; // 1
39.3.3. Ввод/вывод строк
Для ввода/вывода строк типа
basic_string
из потоков типа
basic_istream
в заголовочном файле string перегружены операто-
ры сдвига (shift)
>>
и
<<
:
namespace std
{
template<class E, class T, class A>
basic_ostream<E>& operator<<(basic_ostream<E>& os,
const basic_string<E, T, A>& str);
Часть IV. Стандартная библиотека языка программирования С++
454
template<class E, class T, class A>
basic_istream<E>& operator>>(basic_istream<E>& is,
basic_string<E, T, A>& str);
}
Перегруженный оператор
>>
вводит из потока в строку символы
до тех пор, пока не встретит пробельный символ. При этом веду-
щие пробельные символы пропускаются.
Пример ввода и вывода строк из потока:
string s;
cout << "Input a word> : ";
cin >> s;
cout << "The word: " << s << endl;
39.4. Шаблоны функций
39.4.1. Ввод строк
Для ввода из потока последовательности символов в строку типа
basic_string
в заголовочном файле string перегружены шаблоны
функции
getline
:
namespace std
{
template<class E, class T, class A>
basic_istream<E, T>& getline( basic_istream<E, T>& is,
basic_string<E, T, A>& str);
template<class E, class T, class A>
basic_istream<E, T>& getline(basic_istream<E, T>& is,
basic_string<E, T, A>& str, E delim);
}
Первая шаблонная функция
getline
заканчивает ввод, встретив
символ перехода на новую строку
\n
.
Вторая шаблонная функция
getline
заканчивает ввод, встретив
символ, заданный параметром
delim
.
Обе функции возвращают введенную строку. Ниже приведен
пример ввода и вывода строк из потока:
Глава 39. Работа со строками в С++ <string>
455
string s;
cout << "Input a line> : ";
getline(cin, s);
cout << "The line: " << s << endl;
39.4.2. Обмен строк
Для обмена строк типа
basic_string
своими значениями в заголо-
вочном файле string определен шаблон функции
swap
:
namespace std
{
template<class E, class T, class A>
void swap(basic_string<E, T, A>& lhs,
basic_string<E, T, A>& rhs);
}