Файл: Pobegaylo_A._C_Cplus_dlya_studenta.pdf

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

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

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

Добавлен: 13.12.2020

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

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

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

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


background image

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


background image

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

, который равен любому 

из заданных символов; 


background image

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


background image

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


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