Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«C++. Π‘Π±ΠΎΡ€Π½ΠΈΠΊ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ²Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 44

Автор Π”. БтСфСнс

v объявлСн ΠΊΠ°ΠΊ const ΠΏΠΎ Π΄Π²ΡƒΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, я знаю, Ρ‡Ρ‚ΠΎ я Π½Π΅ ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡΡŒ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ содСрТимоС, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ я Ρ…ΠΎΡ‡Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ компилятор Π²Ρ‹Π΄Π°Π» сообщСниС ΠΎΠ± ошибкС, Ссли это ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ мСня Π² Π΄Π΅Π»Π΅ поиска Ρ‚Π°ΠΊΠΈΡ… Π²Π΅Ρ‰Π΅ΠΉ, особСнно ΠΊΠΎΠ³Π΄Π° ΠΊ Ρ‚Π°ΠΊΠΎΠΌΡƒ ΠΏΡ€ΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡŽ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ тонкая сСмантичСская ΠΈΠ»ΠΈ синтаксичСская ошибка. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, я Ρ…ΠΎΡ‡Ρƒ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ я Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ дСлаю с ΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ, ΠΈ const β€” это Π²Π΅Π»ΠΈΠΊΠΎΠ»Π΅ΠΏΠ½Ρ‹ΠΉ способ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это. Π’Π΅ΠΏΠ΅Ρ€ΡŒ я просто Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, которая Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ символов.

Как ΠΈ Π² Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π΅ 4.6, ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ join Π² ΠΎΠ±Ρ‰ΠΈΠΉ шаблон Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡ‡Π΅Π½ΡŒ просто. ВсС, Ρ‡Ρ‚ΠΎ трСбуСтся ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, β€” это ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π² Ρ‚ΠΈΠΏ символов, ΠΊΠ°ΠΊ здСсь:

template<typename T>

void join(const std::vector<std::basic_string<T> >& v, T c,

 std::basic_string<T>& s)

Но vector ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π΅ СдинствСнным Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ Π²Ρ…ΠΎΠ΄ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ строки Π² стилС Π‘. Класс string C++ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ строк Π² стилС Π‘, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ссли Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ такая Π·Π°Π΄Π°Ρ‡Π°, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠΉΡ‚Π΅ ΠΈΡ… Π² C++ string. ПослС этого всСгда ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ Π‘, Π²Ρ‹Π·Π²Π°Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ string c_str, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ const Π½Π° Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰ΠΈΠΉΡΡ Π½ΡƒΠ»Π΅ΠΌ массив символов.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4.14 ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΎΠ±Ρ‰ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ join, которая ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ массив символов Π² string. Π’Π°ΠΊ ΠΊΠ°ΠΊ новая общая вСрсия ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ символов, ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ для массивов ΡƒΠ·ΠΊΠΈΡ…, Ρ‚Π°ΠΊ ΠΈ для массивов ΡˆΠΈΡ€ΠΎΠΊΠΈΡ… символов.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4.14 ОбъСдинСниС строк Π² стилС C

#include <string>

#include <iostream>


const static int MAGIC_NUMBER = 4;


template<typename T>

void join(T* arr[], size_t n, T c, std::basic_string<T>& s) {

 s.clear();

 for (int i = 0; i < n; ++i) {

  if (arr[i] != NULL)

   s += arr[i];

  if (i < n-1) s += c;

 }

}


int main() {

 std::wstring ws;

 wchar_t* arr[MAGIC_NUMBER];

 arr[0] = L"you";

 arr[1] = L"ate";

 arr[2] = L"my";

 arr[3] = L"breakfast";

 join(arr, MAGIC_NUMBER, L'/', ws);

}

4.9. Поиск Π² строках

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°

ВрСбуСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ поиск Π² строкС. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ поиск ΠΎΠ΄Π½ΠΎΠ³ΠΎ символа, Π΄Ρ€ΡƒΠ³ΠΎΠΉ строки ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· (ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π½Π΅ ΠΈΠ·) нСупорядочСнного Π½Π°Π±ΠΎΡ€Π° символов. И ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ трСбуСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ поиск Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ порядкС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΈΠ»ΠΈ послСднСС Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΈΠ»ΠΈ послСднСС вхоТдСния ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠ°ΠΊΠΎΠ³ΠΎ- Π»ΠΈΠ±ΠΎ полоТСния Π² строкС.

РСшСниС

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Β«findΒ» ΠΈΠ· basic_string. ΠŸΠΎΡ‡Ρ‚ΠΈ всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ поиска Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ со слова Β«findΒ», ΠΈ ΠΈΡ… ΠΈΠΌΠ΅Π½Π° говорят достаточно ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π΄Π΅Π»Π°ΡŽΡ‚. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4.15 ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² поиска.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4.15. Поиск строк

#include <string>

#include <iostream>


int main() {

 std::string s = "Charles Darwin";

 std::cout << s.find("ar") << '\n'; // Поиск ΠΎΡ‚

                                    // Π½Π°Ρ‡Π°Π»Π°

 std::cout << s.rfind("ar") << "\n"; // Поиск с ΠΊΠΎΠ½Ρ†Π°

 std::cout << s.find_first_of("swi") // Найти ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ

  << '\n'; // ΠΈΠ· этих символов

 std::cout << s.find_first_not_of("Charles") // Найти ΠΏΠ΅Ρ€Π²ΠΎΠ΅,

  << '\n';                                   // Ρ‡Ρ‚ΠΎ Π½Π΅ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² этот

                                             // Π½Π°Π±ΠΎΡ€

 std::cout << s.find_last_of("abg") << '\n'; // Найти ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ любого

                                             // ΠΈΠ· этих символов,

                                             // начиная с ΠΊΠΎΠ½Ρ†Π°

 std::cout << s.find_last_not_of("aDinrw") // Найти ΠΏΠ΅Ρ€Π²ΠΎΠ΅,

  << '\n';                                 // Ρ‡Ρ‚ΠΎ Π½Π΅ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² этот

                                           // Π½Π°Π±ΠΎΡ€, начиная с ΠΊΠΎΠ½Ρ†Π°

}

ВсС эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ поиска ΠΎΠ±ΡΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅Β».

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ ΡˆΠ΅ΡΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для поиска Π² строках, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… прСдоставляСт Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°. Π­Ρ‚ΠΈ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ basic_string, Π»ΠΈΠ±ΠΎ charT* (charT β€” это ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ). ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ pos Ρ‚ΠΈΠΏΠ° basic_string::size_type, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ индСкс, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ слСдуСт Π½Π°Ρ‡Π°Ρ‚ΡŒ поиск, ΠΈ Π΅ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ n Ρ‚ΠΈΠΏΠ° size_type, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ поиск Ρ‚ΠΎΠ»ΡŒΠΊΠΎ n символов ΠΈΠ· Π½Π°Π±ΠΎΡ€Π°.

Π—Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ всС эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ довольно слоТно, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π² Ρ‚Π°Π±Π». 4.2 даСтся краткая справка ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΈΠ· Π½ΠΈΡ… ΠΈ ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ.


Π’Π°Π±Π». 4.2. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ для поиска строк

ΠœΠ΅Ρ‚ΠΎΠ΄ ОписаниС size_type find(const basic_string& str, size_type pos = 0) const; Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ индСкс ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ вхоТдСния символа ΠΈΠ»ΠΈ подстроки начиная с Π½Π°Ρ‡Π°Π»Π° ΠΈΠ»ΠΈ индСкса, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ pos. size_type find (const charT* s, size_type pos, size_type n) const; size_type find (const charT* s, size_type pos = 0) const; size_type find(charT c, size_type pos = 0) const; Если ΡƒΠΊΠ°Π·Π°Π½ n, Ρ‚ΠΎ ΠΏΡ€ΠΈ поискС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ n символов Ρ†Π΅Π»Π΅Π²ΠΎΠΉ строки size_type rfind(...) Находит ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ символа ΠΈΠ»ΠΈ подстроки, начиная с ΠΊΠΎΠ½Ρ†Π° строки ΠΈ двигаясь ΠΊ Π΅Π΅ Π½Π°Ρ‡Π°Π»Ρƒ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ find, Π½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ поиск с ΠΊΠΎΠ½Ρ†Π° строки size_type find_first_of(...) Находит ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ любого символа ΠΈΠ· Π½Π°Π±ΠΎΡ€Π°, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ basic_string ΠΈΠ»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° символы. Если ΡƒΠΊΠ°Π·Π°Π½ n, Ρ‚ΠΎ ищутся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ n символов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° size_type find_last_of(...) Находит послСднСС Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ любого символа ΠΈΠ· Π½Π°Π±ΠΎΡ€Π°, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ basic_string ΠΈΠ»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° символы. Если ΡƒΠΊΠ°Π·Π°Π½ n, Ρ‚ΠΎ ищутся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ n символов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° size_type find_first_not_of(...) Находит ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ любого символа, Π½Π΅ входящСго Π² Π½Π°Π±ΠΎΡ€, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°ΠΊ basic_string ΠΈΠ»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° символы. Если ΡƒΠΊΠ°Π·Π°Π½ n, Ρ‚ΠΎ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ n символов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° size_type find_last_not_of(...) Находит послСднСС Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ любого символа, Π½Π΅ входящСго Π² Π½Π°Π±ΠΎΡ€, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°ΠΊ basic_string ΠΈΠ»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° символы. Если ΡƒΠΊΠ°Π·Π°Π½ n, Ρ‚ΠΎ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ n символов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π°

ВсС эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ индСкс вхоТдСния искомого элСмСнта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ basic_string<T>::size_type. Если поиск заканчиваСтся Π½Π΅ΡƒΠ΄Π°Ρ‡Π΅ΠΉ, возвращаСтся basic_string<T>::npos, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ являСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ -1), ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ, Ρ‡Ρ‚ΠΎ поиск Π±Ρ‹Π» Π½Π΅ΡƒΠ΄Π°Ρ‡Π΅Π½. Π”Π°ΠΆΠ΅ хотя ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ -1, ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ слСдуСт ΠΈΠΌΠ΅Π½Π½ΠΎ с npos, Ρ‡Ρ‚ΠΎ обСспСчит ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ. Π’Π°ΠΊΠΆΠ΅ это сдСлаСт ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ понятным, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ сравнСниС с npos являСтся явной ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ, Π½Π΅ содСрТащСй магичСских чисСл.

ИмСя Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² поиска, Ρƒ вас Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π½Π°ΠΉΡ‚ΠΈ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΈΡ‰Π΅Ρ‚Π΅, Π° Ссли Ρ‚Π°ΠΊΠΎΠΉ возмоТности Π½Π΅Ρ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ свои собствСнныС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹. Однако Ссли basic_string Π½Π΅ прСдоставляСт Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ трСбуСтся, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ написаниСм своСго ΠΊΠΎΠ΄Π° посмотритС Π½Π° <algorithm>. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ часто β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Для удобства ΠΈ простоты пСрСноса basic_string прСдоставляСт ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² string ΠΊ стандартным Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌ являСтся Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, Π²Π°ΠΌ трСбуСтся Π½Π°ΠΉΡ‚ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… символов подряд. Для поиска Π΄Π²ΡƒΡ… ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… располоТСнных рядом («располоТСнных рядом» ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈΡ… ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Π½Π° ΠΎΠ΄ΠΈΠ½ шаг ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°, Ρ‚.Π΅. *iter == *(iter + 1)) символов Π² строкС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ шаблон Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ adjacent_find.

std::string s = "There was a group named Kiss in the 70s";

std::string::iterator p =

 std::adjacent_find(s.begin(), s.end());

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ· Π΄Π²ΡƒΡ… смСТных элСмСнтов.

Если Π²Π°ΠΌ трСбуСтся Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ собствСнный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ со строками, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ basic_string Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ это дСлаСтся со строками Π² стилС Π‘, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ для доступа ΠΊ элСмСнтам operator[]. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. КаТдая функция поиска ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ size_type, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ индСкс, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ‡Π°Ρ‚ΡŒΡΡ поиск. ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ поиска, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ ΠΏΠΎ всСй строкС. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 4.16, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ подсчитываСт число ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… символов Π² строкС.