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

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

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4.16. ΠŸΠΎΠ΄ΡΡ‡Π΅Ρ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… символов

#include <string>

#include <iostream>


template<typename T>

int countUnique(const std::basic_string<T>& s) {

 using std::basic_string;

 basic_string<T> chars;

 for (typename basic_string<T>::const_iterator p = s.begin();

  p != s.end(); ++p) {

  if (chars.find(*p) == basic.string<T>::npos)

  chars += *p;

 }

 return(chars.length());

}


int main() {

 std: :string s = "Abracadabra'";

 std::cout << countUnique(s) << '\n';

}

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ поиска ΠΎΡ‡Π΅Π½ΡŒ часто ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ. Когда трСбуСтся Π½Π°ΠΉΡ‚ΠΈ Ρ‡Ρ‚ΠΎ- Π»ΠΈΠ±ΠΎ Π² строкС Ρ‚ΠΈΠΏΠ° string, ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

4.10. Поиск n-Π³ΠΎ вхоТдСния подстроки

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

ИмСя источник source ΠΈ шаблон pattern Ρ‚ΠΈΠΏΠ° string, трСбуСтся Π½Π°ΠΉΡ‚ΠΈ n-Π΅ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ pattern Π² source.

РСшСниС

Для поиска ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ искомой подстроки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ find. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4.17 содСрТит ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ nthSubstr.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4.17. Поиск n-Π³ΠΎ вхоТдСния подстроки

#include <string>

#include <iostream>


using namespace std;


int nthSubstr(int n, const strings s,

 const strings p) {

 string::size_type i = s.find(p); // Найти ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅

 int j;

 for (j = 1; j < n && i != string::npos; ++j)

  i = s.find(p, i+1); // Найти ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅

 if (j == n) return(i);

 else return(-1);

}


int main() (

 string s = "the wind, the sea, the sky, the trees";

 string p = "the";

 cout << nthSubstr(1, s, p) << '\n';

 cout << nthSubstr(2, s, p) << '\n';

 cout << nthSubstr(5, s, p) << '\n';

}

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

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ nthSubstr, ΠΈΠΌΠ΅ΡŽΡ‰ΡƒΡŽ Π²ΠΈΠ΄, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 4.17, ΠΌΠΎΠΆΠ½ΠΎ внСсти ΠΏΠ°Ρ€Ρƒ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠΉ. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰Π΅ΠΉ, сдСлав ΠΈΠ· Π½Π΅Π΅ вмСсто ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ шаблон Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ подстроки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Под ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌΠΈΡΡ подстроками я понимаю Ρ‚Π°ΠΊΠΈΠ΅, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π°Ρ‡Π°Π»ΠΎ строки соотвСтствуСт части ΠΊΠΎΠ½Ρ†Π° Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ строки, ΠΊΠ°ΠΊ Π² строкС Β«abracadabraΒ», Π³Π΄Π΅ послСдниС Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ символа Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅. Π­Ρ‚ΠΎ дСмонстрируСтся Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 4.18.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4.18. Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π½Π°Ρ вСрсия nthSubstr

#include <string>

#include <iostream>


using namespace std;


template<typename T>

int nthSubstrg(int n, const basic_string<T>& s,

 const basic_string<T>& p, bool repeats = false) {

 string::size_type i = s.find(p);

 string::size_type adv = (repeats) ? 1 : p.length();

 int j;

 for (j = 1; j < n && i != basic_string<T>::npos; ++j)

  i = s.find(p, i+adv);

 if (j == n)

  return(i);

 else

  return(-1);

}


int main() {

 string s = AGATGCCATATATATACGATATCCTTA";

 string p = "ATAT";

 cout << p << " Π±Π΅Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ встрСчаСтся Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ "

  << nthSubstrg(3, s, p) << '\n';

 cout << p << " с повторСниями встрСчаСтся Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ "

  << nthSubstrg(3, s, p, true) << '\n';

}

Π’Ρ‹Π²ΠΎΠ΄ для строк, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 4.18, выглядит Ρ‚Π°ΠΊ.

ATAT Π±Π΅Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ встрСчаСтся Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ 18

ATAT с повторСниями встрСчаСтся Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ 11

Π‘ΠΌΠΎΡ‚Ρ€ΠΈ Ρ‚Π°ΠΊΠΆΠ΅

Π Π΅Ρ†Π΅ΠΏΡ‚ 4.9.

4.11. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ подстроки ΠΈΠ· строки

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

ВрСбуСтся ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΈΠ· строки подстроку.

РСшСниС

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ basic_string find, erase ΠΈ length:

std::string t = "Banana Republic";

std::string s = "nana";

std::string::size_type i = t.find(s);

if (i != std::string::npos) t.erase(i, s.length());

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ удаляСт s.length() элСмСнтов, начиная с индСкса, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ find Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ подстроки.

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

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ встрСчаСтся ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΉ Π½Π° Ρ‚Π΅ΠΌΡƒ поиска ΠΈ удалСния подстрок. НапримСр, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ всС вхоТдСния подстроки, Π° Π½Π΅ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π½ΠΈΡ…. Или Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послСднСС. Или сСдьмоС. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· дСйствия Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅: Π½Π°ΠΉΠ΄ΠΈΡ‚Π΅ индСкс Π½Π°Ρ‡Π°Π»Π° шаблона, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ трСбуСтся ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ, Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ erase для этого индСкса ΠΈ n ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… символов, Π³Π΄Π΅ n β€” это Π΄Π»ΠΈΠ½Π° строки шаблона. Π—Π° описаниСм Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² поиска подстрок ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρƒ 4.9.

Π’Π°ΠΊΠΆΠ΅ Π²Π΅Π»ΠΈΠΊΠ° Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ потрСбуСтся ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ удалСния ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠΉ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ с Π»ΡŽΠ±Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ символов. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4.19 ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΎΠ±Ρ‰ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, которая удаляСт всС вхоТдСния шаблона Π² строкС.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4.19. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ всСх подстрок ΠΈΠ· строки (обобщСнная вСрсия)

#include <string>

#include <iostream>


using namespace std;


template<typename T>

void removeSubstrs(basic_string<T>& s,

 const basic_string<T>& p) {

 basic_string<T>::size_type n = p.length();

 for (basic_string<T>::size_type i = s.find(p);

  i != basic_string<T>::npos; i = s.find(p))

  s.erase(i, n);

}


int main() {

 string s = "One fish, two fish, red fish, blue fish";

 string p = "fish";

 removeSubstrs(s, p);

 cout << s << '\n';

}

Π—Π΄Π΅ΡΡŒ всю Π²Π°ΠΆΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ выполняСт ΠΌΠ΅Ρ‚ΠΎΠ΄ erase basic_string. Π’ <string> ΠΎΠ½ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½ Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π°. Использованная Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 4.19 вСрсия ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ индСкс, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ трСбуСтся Π½Π°Ρ‡Π°Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅, ΠΈ число удаляСмых символов. Другая вСрсия ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ вСрсия, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ СдинствСнный ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈ удаляСт элСмСнт, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ удалСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π΅ вСрсии ΠΈ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ s.erase(iter) нСсколько Ρ€Π°Π· для удалСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΈΠ΄ΡƒΡ‰ΠΈΡ… подряд элСмСнтов. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ с Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°ΠΌΠΈ, Π° Π½Π΅ с ΠΎΠ΄Π½ΠΈΠΌ элСмСнтом, особСнно Π² случаС Ρ‚Π΅Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ содСрТимоС строки (ΠΈΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ). Π’ этом случаС Π²Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠΈΡ‚Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ erase для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ string Π±ΠΎΠ»Π΅Π΅ Π³Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π΅Π΅ содСрТимым.

4.12. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ строки ΠΊ Π½ΠΈΠΆΠ½Π΅ΠΌΡƒ ΠΈΠ»ΠΈ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌΡƒ рСгистру

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

Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ строка, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ трСбуСтся ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊ Π½ΠΈΠΆΠ½Π΅ΠΌΡƒ ΠΈΠ»ΠΈ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌΡƒ рСгистру.

РСшСниС

Для прСобразования символов ΠΊ Π½ΠΈΠΆΠ½Π΅ΠΌΡƒ ΠΈΠ»ΠΈ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌΡƒ рСгистру ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ toupper ΠΈ tolower ΠΈΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° <cctype>. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4.20 ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ обсуТдСниС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4.20. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ рСгистра строки

#include <iostream>

#include <string>

#include <cctype>

#include <cwctype>

#include <stdexcept>


using namespace std;


void toUpper(basic_string<char>& s) {

 for (basic_string<char>::iterator p = s.begin();

 p != s.end(); ++p) {

  *p = toupper(*p); // toupper is for char

 }

}


void toUpper<basic_string<wchar_t>& s) {

 for (basic_string<wchar_t>::iterator p = s.begin();

  p != s.end(); ++p) {

  *p = towupper(*p); // towupper is for wchar_t

 }

}


void toLower(basic_string<char>& s) {

 for (basic_string<char>::iterator p = s.begin();

  p != s.end(); ++p) {

  *p = tolower(*p);

 }

}


void toLower(basic_string<wchar_t>& s) {

 for (basic_string<wchar_t>::iterator p = s.begin();

  p != s.end(); ++p) {

  *p = towlower(*p);

}


int main() {

 string s = "shazam";

 wstring ws = L"wham";

 toUpper(s); toUpper(ws);

 cout << "s = " << s << endl;

 wcout << "ws = " << ws << endl;

 toLower(s);

 toLower(ws);

 cout << "s = " << s << endl;

 wcout << "ws = " << ws << endl;

}

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄.

s = SHAZAM

ws = WHAM

s = shazam

ws = wham

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

ΠšΡ‚ΠΎ-Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ стандартный класс string содСрТит ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰ΠΈΠΉ всю строку ΠΊ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌΡƒ ΠΈΠ»ΠΈ Π½ΠΈΠΆΠ½Π΅ΠΌΡƒ рСгистру, Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ это Π½Π΅ Ρ‚Π°ΠΊ. Если трСбуСтся ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ строку символов ΠΊ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌΡƒ ΠΈΠ»ΠΈ Π½ΠΈΠΆΠ½Π΅ΠΌΡƒ рСгистру, это трСбуСтся Π΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ.

ΠΠ΅ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ имССтся нСсколько способов прСобразования рСгистра строки (ΠΈ ΠΊΠΎΠ³Π΄Π° я Π³ΠΎΠ²ΠΎΡ€ΡŽ «строки», Ρ‚ΠΎ имСю Π² Π²ΠΈΠ΄Ρƒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ символов ΠΊΠ°ΠΊ ΡƒΠ·ΠΊΠΈΡ…, Ρ‚Π°ΠΊ ΠΈ ΡˆΠΈΡ€ΠΎΠΊΠΈΡ…). ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΌ способом ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это являСтся использованиС ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ прСобразования символов toupper, towupper, tolower ΠΈ towlower. ΠŸΠ΅Ρ€Π²Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΡƒΠ·ΠΊΠΈΠΌΠΈ символами, Π° вторая Ρ„ΠΎΡ€ΠΌΠ° (с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π±ΡƒΠΊΠ²ΠΎΠΉ w) являСтся Π΅Π΅ эквивалСнтом для ΡˆΠΈΡ€ΠΎΠΊΠΈΡ… символов.