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

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

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

9.5.1. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ способы создания строк

Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ конструкторам, описанным Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 3.2.1, ΠΈ конструкторам, ΠΎΠ±Ρ‰ΠΈΠΌ для всСх ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² (см. Ρ‚Π°Π±Π». 9.3), Ρ‚ΠΈΠΏ string прСдоставляСт Π΅Ρ‰Π΅ Ρ‚Ρ€ΠΈ конструктора, описанныС Π² Ρ‚Π°Π±Π». 9.11.


Π’Π°Π±Π»ΠΈΡ†Π° 9.11. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ способы создания строк 

ВсС значСния n, len2 ΠΈ pos2 ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ. string s(cp, n); Π‘Ρ‚Ρ€ΠΎΠΊΠ° s β€” копия ΠΏΠ΅Ρ€Π²Ρ‹Ρ… n символов ΠΈΠ· массива, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ cp. Π£ Ρ‚ΠΎΠ³ΠΎ массива Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ n символов string s(s2, pos2); Π‘Ρ‚Ρ€ΠΎΠΊΠ° s β€” копия символов ΠΈΠ· строки s2, начиная с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΏΠΎ индСксу pos2. Если pos2 > s2.size(), Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ нСпрСдсказуСм string s(s2, pos2, len2); Π‘Ρ‚Ρ€ΠΎΠΊΠ° s β€” копия len2 символов ΠΈΠ· строки s2, начиная с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΏΠΎ индСксу pos2. Если pos2 > s2.size(), Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ нСпрСдсказуСм. НСзависимо ΠΎΡ‚ значСния len2, копируСтся ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ s2.size() - pos2 символов

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏ string ΠΈΠ»ΠΈ const char*, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ (Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅) Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ Π·Π°Π΄Π°Ρ‚ΡŒ количСство ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… символов. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ строки ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ индСкс Π½Π°Ρ‡Π°Π»Π° копирования:

const char *cp = "Hello World!!!"; // массив с Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ символом Π² ΠΊΠΎΠ½Ρ†Π΅

char noNull[] = {'H', 'i' };       // Π±Π΅Π· Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ символа Π² ΠΊΠΎΠ½Ρ†Π΅

string s1(cp); // ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ cp Π΄ΠΎ Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ символа;

               // s1 == "Hello World!!!"

string s2(noNull,2);  // ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Π²Π° символа ΠΈΠ· noNull; s2 == "Hi"

string s3(noNull);    // нСпрСдсказуСмо: noNull Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ null

string s4(cp + 6, 5); // ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ 5 символов, начиная с cp[6];

                      // s4 == "World"

string s5(s1, 6, 5);  // ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ 5 символов, начиная с s1[6];

                      // s5 == "World"

string s6(s1, 6);     // ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΡ‚ s1[6] Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° s1;

                      // s6 == "World!!!"

string s7(s1, 6, 20); // ok, ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° s1;

                      // s7 == "World!!!"

string s8(s1, 16);    // ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ out_of_range

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ строка создаСтся ΠΈΠ· Ρ‚ΠΈΠΏΠ° const char*. Массив, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒΡΡ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ символом; символы ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π΄ΠΎ Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ символа. Если пСрСдаСтся Ρ‚Π°ΠΊΠΆΠ΅ количСство, массив Π½Π΅ обязан Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ символом. Если количСство Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ ΠΈ Π½Π΅Ρ‚ Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ символа ΠΈΠ»ΠΈ Ссли ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ количСство большС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ нСпрСдсказуСм.

ΠŸΡ€ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΠ· строки ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ исходной ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΈ количСство ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… символов. Π˜ΡΡ…ΠΎΠ΄Π½Π°Ρ позиция Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ мСньшС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠΉ строки. Если исходная позиция большС Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Ρ‚ΠΎ конструктор пСрСдаст ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ out_of_range (см. Ρ€Π°Π·Π΄Π΅Π» 5.6). ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ количСства ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ начинаСтся с ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ. НСзависимо ΠΎΡ‚ количСства Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½Ρ‹Ρ… символов, ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ осущСствляСтся Π΄ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° строки, Π½ΠΎ Π½Π΅ Π±ΠΎΠ»Π΅Π΅.

Ѐункция substr()

Ѐункция substr() (прСдставлСнная Π² Ρ‚Π°Π±Π». 9.12) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ копию части ΠΈΠ»ΠΈ всСй исходной строки. Π•ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ (Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ) Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΈ количСство ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… символов:

string s("hello world");

string s2 = s.substr(0, 5);  // s2 = hello

string s3 = s.substr(6);     // s3 = world

string s4 = s.substr(6, 11); // s3 = world

string s5 = s.substr(12);    // ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ out_of_range

Если Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ позиция ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ исходной строки, функция substr() ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ out_of_range (см. Ρ€Π°Π·Π΄Π΅Π» 5.6). Если Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ позиция Π² суммС с количСством ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… символов прСвосходит Ρ€Π°Π·ΠΌΠ΅Ρ€ строки, Ρ‚ΠΎ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ осущСствляСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° строки.


Π’Π°Π±Π»ΠΈΡ†Π° 9.12. Ѐункция substr()

s.substr(pos, n) Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ n символов ΠΈΠ· строки s, начиная с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ pos. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ pos ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ n ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‰Π΅Π΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ всСх символов строки s, начиная с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ pos УпраТнСния Ρ€Π°Π·Π΄Π΅Π»Π° 9.5.1

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 9.41. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ строку ΠΈΠ· Π²Π΅ΠΊΡ‚ΠΎΡ€Π° vector<char>.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 9.42. Учитывая, Ρ‡Ρ‚ΠΎ символы Π² строку слСдуСт Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈ Π·Π°Ρ€Π°Π½Π΅Π΅ извСстно, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ прСдстоит ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ 100 символов, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹?

9.5.2. Π”Ρ€ΡƒΠ³ΠΈΠ΅ способы измСнСния строки

Π’ΠΈΠΏ string ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ присвоСния ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ assign(), insert() ΠΈ erase() (см. Ρ€Π°Π·Π΄Π΅Π» 9.2.5, Ρ€Π°Π·Π΄Π΅Π» 9.3.1 ΠΈ Ρ€Π°Π·Π΄Π΅Π» 9.3.3). Π’ Π½Π΅ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ вСрсии Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ insert() ΠΈ erase().

Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ вСрсиям Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ insert() ΠΈ erase(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, Ρ‚ΠΈΠΏ string прСдоставляСт ΠΈΡ… вСрсии, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠ΅ индСкс. ИндСкс ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ erase() ΠΈΠ»ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ insert():

s.insert(s.size(), 5, '!'); // Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡΡ‚ΡŒ Π²ΠΎΡΠΊΠ»ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°ΠΊΠΎΠ²

                            // Π² ΠΊΠΎΠ½Π΅Ρ† строки s

s.erase(s.size() - 5, 5);   // ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ послСдниС ΠΏΡΡ‚ΡŒ символов ΠΈΠ·

                            // строки s

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° string прСдоставляСт Ρ‚Π°ΠΊΠΆΠ΅ вСрсии Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ insert() ΠΈ assign(), ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠ΅ массивы символов Π² стилС Π‘. НапримСр, ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ массив с Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ символом Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠ΅ функциям insert() ΠΈ assign():

const char *cp = "Stately, plump Buck";

s.assign(cp, 7);            // s == "Stately"

s.insert(s.size(), cp + 7); // s == "Stately, plump Buck"

Π‘Π½Π°Ρ‡Π°Π»Π° содСрТимоС строки s замСняСтся ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ assign(). ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ строкС s символы β€” это сСмь символов ΠΈΠ· Π½Π°Ρ‡Π°Π»Π° массива, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ cp. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… символов Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ мСньшС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎ количСству символов массива (ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰ΠΈΠΉ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ символ), Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ cp.

Когда происходит Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ insert() для строки s, подразумСваСтся вставка символов ΠΏΠ΅Ρ€Π΅Π΄ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ элСмСнтом Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ s[size()]. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ символы, начиная с сСдьмого символа cp ΠΈ Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰Π΅Π³ΠΎ Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ символа.

Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ insert() ΠΈ assign() ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ исходящиС ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠΉ строки ΠΈΠ»ΠΈ Π΅Π΅ подстроки:

string s = "some string", s2 = "some other string";

s.insert(0, s2); // Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ копию s2 ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠ΅ΠΉ 0 Π² s

// Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ s2.size() символов ΠΈΠ· s2,

// Π½Π°Ρ‡ΠΈΠ½Π°Ρ с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ s2[0] ΠΏΠ΅Ρ€Π΅Π΄ s[0]

s.insert(0, s2, 0, s2.size());

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ append() ΠΈ replace()

Класс string опрСдСляСт Π΄Π²Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Π°, append() ΠΈ replace(), способныС ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ содСрТимоС строки. ВсС эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ описаны Π² Ρ‚Π°Π±Π». 9.13. Ѐункция append() β€” ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹ΠΉ способ вставки Π² ΠΊΠΎΠ½Π΅Ρ†:

string s("C++ Primer"), s2 = s; // инициализация строк s ΠΈ s2

                                // тСкстом "Π‘++ Primer"

s.insert(s.size(), " 4th Ed."); // s == "Π‘++ Primer 4th Ed."

s2.append(" 4th Ed."); // эквивалСнт: Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ " 4th Ed." ΠΊ s2;

                       // s == s2

Ѐункция replace() β€” ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹ΠΉ способ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ erase() ΠΈ insert():

// эквивалСнтный способ Π·Π°ΠΌΠ΅Π½Ρ‹ "4th" Π½Π° "5th"

s.erase(11, 3); // s == "Π‘++ Primer Ed."

s.insert(11, "5th"); // s == "Π‘++ Primer 5th Ed."

// начиная с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ 11, ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ‚Ρ€ΠΈ символа, Π° Π·Π°Ρ‚Π΅ΠΌ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ "5th"

s2.replace(11, 3, "5th"); // эквивалСнт: s == s2

Π’ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ replace() вставляСмый тСкст ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Ρ‡Ρ‚ΠΎ ΠΈ удаляСмый. Но ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΈΠ»ΠΈ ΠΌΠ΅Π½ΡŒΡˆΡƒΡŽ строку:

s.replace(11, 3, "Fifth"); // s == "Π‘++ Primer Fifth Ed."

Π’ этом Π²Ρ‹Π·ΠΎΠ²Π΅ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ символа, Π½ΠΎ вмСсто Π½ΠΈΡ… Π²ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΏΡΡ‚ΡŒ.


Π’Π°Π±Π»ΠΈΡ†Π° 9.13. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ измСнСния содСрТимого строки

s.insert(pos, args) Вставка символов, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ args, ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠ΅ΠΉ pos. ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ pos ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½Π° индСксом ΠΈΠ»ΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ. ВСрсии, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠ΅ индСкс, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ссылку Π½Π° строку s, Π° ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠ΅ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ вставлСнный символ s.erase(pos, len) УдаляСт len символов, начиная с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ pos. Если Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ len ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½, удаляСт символы ΠΎΡ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ pos Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° строки s. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ссылку Π½Π° строку s s.assign(args) ЗамСняСт символы строки s согласно Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρƒ args. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ссылку Π½Π° строку s s.append(args) ДобавляСт Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ args ΠΊ строкС s. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ссылку Π½Π° строку s s.replace(range, args) УдаляСт Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ range символов ΠΈΠ· строки s ΠΈ замСняСт ΠΈΡ… символами, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ args. Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π·Π°Π΄Π°Π½ Π»ΠΈΠ±ΠΎ индСксом ΠΈ Π΄Π»ΠΈΠ½ΠΎΠΉ, Π»ΠΈΠ±ΠΎ ΠΏΠ°Ρ€ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ². Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ссылку Π½Π° строку s АргумСнты args ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ…: Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ append() ΠΈ assign() ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС Ρ„ΠΎΡ€ΠΌΡ‹. Π‘Ρ‚Ρ€ΠΎΠΊΠ° str Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π»ΠΈΡ‡Π½Π° ΠΎΡ‚ s, Π° ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ b ΠΈ Π΅ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ΡŒ строкС s str Π‘Ρ‚Ρ€ΠΎΠΊΠ° str str, pos, len Π”ΠΎ len символов ΠΈΠ· строки str, начиная с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ pos cp, len Π”ΠΎ len символов ΠΈΠ· символьного массива, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ cp cp Π—Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰ΠΈΠΉΡΡ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ символом массив, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ cp n, c n ΠΊΠΎΠΏΠΈΠΉ символа с b, e Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ b ΠΈ Π΅ Бписок ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ РаздСляСмый запятыми список символов, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΉ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки АргумСнты args для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ replace() ΠΈ insert() зависят ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, использован Π»ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΈΠ»ΠΈ позиция replace(pos,len,args) replace(b,Π΅,args) insert(pos,args) insert(iter,args) Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ args Π”Π° Π”Π° Π”Π° НСт str Π”Π° НСт Π”Π° НСт str, pos, len Π”Π° Π”Π° Π”Π° НСт cp, len Π”Π° Π”Π° НСт НСт cp Π”Π° Π”Π° Π”Π° Π”Π° n, с НСт Π”Π° НСт Π”Π° b2, e2 НСт Π”Π° НСт Π”Π° список ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ способов ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ строку

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ append(), assign(), insert() ΠΈ replace(), пСрСчислСнныС Π² Ρ‚Π°Π±Π». 9.13, ΠΈΠΌΠ΅ΡŽΡ‚ нСсколько ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… вСрсий. АргумСнты этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ зависят ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π·Π°Π΄Π°Π½Ρ‹ добавляСмыС символы ΠΈ какая Ρ‡Π°ΡΡ‚ΡŒ строки измСнится. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Ρƒ этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΠ±Ρ‰ΠΈΠΉ интСрфСйс.