Файл: Pobegaylo_A._C_Cplus_dlya_studenta.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 13.12.2020

Просмотров: 4106

Скачиваний: 28

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Глава 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- 


background image

Часть 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


background image

Глава 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); 


background image

Часть 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

Обе  функции  возвращают  введенную  строку.  Ниже  приведен 
пример ввода и вывода строк из потока: 


background image

Глава 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); 

 


Смотрите также файлы