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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования C++. ΠŸΡΡ‚ΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 33

Автор Π‘Ρ‚Π΅Π½Π»ΠΈ Π›ΠΈΠΏΠΏΠΌΠ°Π½

ΠšΡ€ΠΎΠΌΠ΅ срСдств, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для языка Π‘++, Π΅Π³ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° содСрТит Ρ‚Π°ΠΊΠΆΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ языка Π‘. ИмСна Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² языка Π‘ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ имя.h. ВСрсии этих ΠΆΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² языка Π‘++ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ cимя, Ρ‚.Π΅. суффикс .h ΡƒΠ΄Π°Π»Π΅Π½, Π° ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ символ с, ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΠΉ, Ρ‡Ρ‚ΠΎ этот Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Π‘.

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρƒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° cctype Ρ‚ΠΎ ΠΆΠ΅ содСрТимоС, Ρ‡Ρ‚ΠΎ ΠΈ Ρƒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ctype.h, Π½ΠΎ Π² Ρ„ΠΎΡ€ΠΌΠ΅, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π‘++. Π’ частности, ΠΈΠΌΠ΅Π½Π°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°Ρ… с имя, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π² пространствС ΠΈΠΌΠ΅Π½ std, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°Ρ… .h, β€” Π½Π΅Ρ‚.

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π½Π° языкС Π‘++ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ вСрсии cимя, Π° Π½Π΅ имя.h. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΈΠΌΠ΅Π½Π° ΠΈΠ· стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ быстро Π½Π°ΠΉΠ΄Π΅Π½Ρ‹ Π² пространствС ΠΈΠΌΠ΅Π½ std. ИспользованиС Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° .h Π²ΠΎΠ·Π»Π°Π³Π°Π΅Ρ‚ Π½Π° программиста Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π·Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡŽ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ унаслСдованы ΠΎΡ‚ языка Π‘, Π° ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ языку Π‘++.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ символа, использованиС сСрийного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° for

Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅Ρ‡Ρ‚ΠΎ с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ символом Π² строкС, Ρ‚ΠΎ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ являСтся использованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°, Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π½ΠΎΠ²Ρ‹ΠΌ стандартом, β€” сСрийный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ for (range for). Π­Ρ‚ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ элСмСнты Π΄Π°Π½Π½ΠΎΠΉ Π΅ΠΌΡƒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ выполняСт с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΈΠ· Π½ΠΈΡ… Π½Π΅ΠΊΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ. Π•Π³ΠΎ синтаксичСская Ρ„ΠΎΡ€ΠΌΠ° Ρ‚Π°ΠΊΠΎΠ²Π°:

for (объявлСниС : Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅)

 ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€

Π³Π΄Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ β€” это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π° объявлСниС опрСдСляСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, которая Π±ΡƒΠ΄Π΅Ρ‚ использована для доступа ΠΊ элСмСнтам ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. На ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ пСрСмСнная Π² объявлСнии инициализируСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ элСмСнта Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ.

Π‘Ρ‚Ρ€ΠΎΠΊΠ° прСдставляСт собой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ символов, поэтому ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° string ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² сСрийном ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ for. НапримСр, сСрийный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ for ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ символа строки Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ строкС Π²Ρ‹Π²ΠΎΠ΄Π°.

string str("some string");

// вывСсти символы строки str ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π½Π° строку

for (auto с : str)  // для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ символа Π² строкС str

 cout << с << endl; // вывСсти Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ символ ΠΈ символ Π½ΠΎΠ²ΠΎΠΉ строки

Π¦ΠΈΠΊΠ» for ассоциируСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ с с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ str Ρ‚ΠΈΠΏΠ° string. Π£ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π°Ρ пСрСмСнная Ρ†ΠΈΠΊΠ»Π° опрСдСляСтся Ρ‚Π΅ΠΌ ΠΆΠ΅ способом, Ρ‡Ρ‚ΠΎ ΠΈ любая другая пСрСмСнная. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ спСцификатор auto (см. Ρ€Π°Π·Π΄Π΅Π» 2.5.2), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ компилятору ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ с, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΈΠΏ char. На ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ символ строки str Π±ΡƒΠ΄Π΅Ρ‚ скопирован Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ с. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ этот Ρ†ΠΈΠΊΠ» Ρ‚Π°ΠΊ: "Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ символа с Π² строкС str" ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅Ρ‡Ρ‚ΠΎ. Под "Π½Π΅Ρ‡Ρ‚ΠΎ" Π² Π΄Π°Π½Π½ΠΎΠΌ случаС подразумСваСтся Π²Ρ‹Π²ΠΎΠ΄ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ символа, сопровоТдаСмого символом Π½ΠΎΠ²ΠΎΠΉ строки.

Рассмотрим Π±ΠΎΠ»Π΅Π΅ слоТный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ сСрийный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ for, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ispunct() для подсчСта количСства Π·Π½Π°ΠΊΠΎΠ² ΠΏΡƒΠ½ΠΊΡ‚ΡƒΠ°Ρ†ΠΈΠΈ Π² строкС:

string s("Hello World!!!");

// punct_cnt ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚ΠΈΠΏ, Ρ‡Ρ‚ΠΎ ΠΈ Ρƒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния

// Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ s.size(); см. p. 2.5.3

decltype(s.size()) punct_cnt = 0;

// ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ количСство Π·Π½Π°ΠΊΠΎΠ² ΠΏΡƒΠ½ΠΊΡ‚ΡƒΠ°Ρ†ΠΈΠΈ Π² строкС s

for (auto с : s) // для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ символа Π² строкС s

 if (ispunct(c)) // Ссли символ Π·Π½Π°ΠΊ ΠΏΡƒΠ½ΠΊΡ‚ΡƒΠ°Ρ†ΠΈΠΈ

   ++punct_cnt;  // ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ счСтчик ΠΏΡƒΠ½ΠΊΡ‚ΡƒΠ°Ρ†ΠΈΠΉ

cout << punct_cnt

     << " punctuation characters in " << s << endl;

Π’Ρ‹Π²ΠΎΠ΄ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ‚Π°ΠΊΠΎΠ²:

3 punctuation characters in Hello World!!!

Π—Π΄Π΅ΡΡŒ для объявлСния счСтчика punct_cnt ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ спСцификатор decltype (см. Ρ€Π°Π·Π΄Π΅Π» 2.5.3). Π•Π³ΠΎ Ρ‚ΠΈΠΏ совпадаСт с Ρ‚ΠΈΠΏΠΎΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ s.size(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ являСтся Ρ‚ΠΈΠΏ string::size_type. Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ символа Π² строкС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ сСрийный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ for. На сСй Ρ€Π°Π· провСряСтся, являСтся Π»ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ символ Π·Π½Π°ΠΊΠΎΠΌ ΠΏΡƒΠ½ΠΊΡ‚ΡƒΠ°Ρ†ΠΈΠΈ. Если Π΄Π°, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° (см. Ρ€Π°Π·Π΄Π΅Π» 1.4.1) для добавлСния Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ ΠΊ счСтчику. Когда сСрийный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ for Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ, отобраТаСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

ИспользованиС сСрийного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° for для измСнСния символов Π² строкС

Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ символов Π² строкС, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ†ΠΈΠΊΠ»Π° слСдуСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ссылочный Ρ‚ΠΈΠΏ (см. Ρ€Π°Π·Π΄Π΅Π» 2.3.1). ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ссылка β€” это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ имя для Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠŸΡ€ΠΈ использовании ссылки Π² качСствС ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ связана с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ элСмСнтом ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ссылку, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ символ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ½Π° связана.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ вмСсто подсчСта Π·Π½Π°ΠΊΠΎΠ² ΠΏΡƒΠ½ΠΊΡ‚ΡƒΠ°Ρ†ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ всС Π±ΡƒΠΊΠ²Ρ‹ строки Π² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ рСгистр. Для этого ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ toupper(), которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ символ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ рСгистрС. Для прСобразования всСй строки Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ toupper() для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ символа ΠΈ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² Ρ‚ΠΎΡ‚ ΠΆΠ΅ символ:

string s("Hello World!!!");

// ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ s Π² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ рСгистр

for (auto &с : s) // для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ символа Π² строкС s

                  // (ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: с - ссылка)

 Ρ = toupper(с);  // с - ссылка, поэтому присвоСниС измСняСт

                  // символ Π² строкС s

cout << s << endl;

Π’Ρ‹Π²ΠΎΠ΄ этого ΠΊΠΎΠ΄Π° Ρ‚Π°ΠΊΠΎΠ²:

HELLO WORLD!!!

На ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ пСрСмСнная с ссылаСтся Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ символ строки s. ΠŸΡ€ΠΈ присвоСнии значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ с измСняСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ символ Π² строкС s.

с = toupper(с); // с - ссылка, поэтому присвоСниС измСняСт

                // символ Π² строкС s

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π΄Π°Π½Π½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ измСняСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ символа, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ связана пСрСмСнная с. По Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ этого Ρ†ΠΈΠΊΠ»Π° всС символы Π² строкС str Π±ΡƒΠ΄ΡƒΡ‚ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ рСгистрС.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° лишь Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… символов

Π‘Π΅Ρ€ΠΈΠΉΠ½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ for Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ символ. Но ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ доступ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ символу ΠΈΠ»ΠΈ ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ количСству символов Π½Π° основании Π½Π΅ΠΊΠΎΠ΅Π³ΠΎ условия. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ рСгистр Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ строки ΠΈΠ»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ слово Π² строкС.

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π²Π° способа доступа ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ символам Π² строкС: ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ индСксированиС ΠΈΠ»ΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€. Π‘ΠΎΠ»Π΅Π΅ подробная информация ΠΎΠ± ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ… ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 3.4 ΠΈ Π² Π³Π»Π°Π²Π΅ 9.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ индСксирования (ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ []) ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° string::size_type (Ρ€Π°Π·Π΄Π΅Π» 3.2.2), ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ символа, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ доступ. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ссылку Π½Π° символ Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ.

Π˜Π½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡ строк начинаСтся с нуля; Ссли строка s содСрТит ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ Π΄Π²Π° символа, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ символ s[0], Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ β€” s[1], Π° послСдним символом являСтся s[s.size() - 1].

ЗначСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ для индСксирования строк, Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€Π΅Π²ΠΎΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ строки (>= 0 ΠΈ < size()). Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ использования индСкса Π²Π½Π΅ этого Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° нСпрСдсказуСм. НСпрСдсказуСма Ρ‚Π°ΠΊΠΆΠ΅ индСксация пустой строки.

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° индСксирования называСтся индСксом (index). ИндСкс ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΌ цСлочислСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Если Ρƒ индСкса Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ, Ρ‚ΠΎ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ прСобразуСтся Π² Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ size_type (см. Ρ€Π°Π·Π΄Π΅Π» 2.1.2).

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ индСксирования для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ символа строки:

if (!s.empty())        // ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΠΈΠ²ΡˆΠΈΡΡŒ, Ρ‡Ρ‚ΠΎ символ для Π²Ρ‹Π²ΠΎΠ΄Π° Π΅ΡΡ‚ΡŒ,

 cout << s[0] << endl; // вывСсти ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ строки s

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ символу, удостовСримся, Ρ‡Ρ‚ΠΎ строка s Π½Π΅ пуста. ΠŸΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ использовании индСксирования слСдуСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ значСния Π² Π΄Π°Π½Π½ΠΎΠΉ области. Если строка s пуста, Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ s[0] Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ.

Если строка Π½Π΅ константа (см. Ρ€Π°Π·Π΄Π΅Π» 2.4), Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π½ΠΎΠΌΡƒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ индСксирования символу ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. НапримСр, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ ΠΌΠΎΠΆΠ½ΠΎ пСрСвСсти Π² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ рСгистр ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

string s("some string");

if (!s.empty())        // ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΡΡ Π² Π½Π°Π»ΠΈΡ‡ΠΈΠΈ символа s[0]