Π Π°Π±ΠΎΡ‚Π° с тСкстовыми Π΄Π°Π½Π½Ρ‹ΠΌΠΈ являСтся Π½Π΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅. Π‘ΡƒΠ΄ΡŒ Ρ‚ΠΎ валидация Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ² ΠΈΠ»ΠΈ слоТная Π»ΠΎΠ³ΠΈΠΊΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ справочников, программисту постоянно приходится ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ Π°Π½Π°Π»ΠΈΠ·Π° тСкста. ПониманиС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ всС символы Π² строкС 1Π‘, ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ доступ ΠΊ созданию Π³ΠΈΠ±ΠΊΠΈΡ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΈΡ… языков программирования, Π³Π΄Π΅ строки часто ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ массивы символов, Π² 1Π‘ строка являСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ… со своими ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ. Π­Ρ‚ΠΎ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚ΠΎΠΊ Π½Π° Π²Ρ‹Π±ΠΎΡ€ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΊ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΊΠ°ΠΊ классичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ с использованиСм счСтчиков, Ρ‚Π°ΠΊ ΠΈ Π±ΠΎΠ»Π΅Π΅ соврСмСнныС конструкции языка, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹ΠΉ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄.

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ рассмотрим Ρ‚Ρ€ΠΈ основных ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ этой Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΠΈΡ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ тонкости Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ символами (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, эмодзи), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‚Π°Ρ‚ΡŒ "ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹ΠΌ ΠΊΠ°ΠΌΠ½Π΅ΠΌ" для Π½Π΅ΠΎΠΏΡ‹Ρ‚Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°.

ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ с использованиСм счСтчика ΠΈ Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π‘ΠΈΠΌΠ²ΠΎΠ»

Π‘Π°ΠΌΡ‹ΠΉ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ способ, Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΉ программистам, ΠΏΡ€ΠΈΡˆΠ΅Π΄ΡˆΠΈΠΌ Π² 1Π‘ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… языков β€” это использованиС Ρ†ΠΈΠΊΠ»Π° с ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ базируСтся Π½Π° Π·Π½Π°Π½ΠΈΠΈ Π΄Π»ΠΈΠ½Ρ‹ строки ΠΈ возмоТности извлСчСния символа ΠΏΠΎ Π΅Π³ΠΎ индСксу. Для получСния Π΄Π»ΠΈΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ встроСнная функция Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(), Π° для извлСчСния ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Π·Π½Π°ΠΊΠ° β€” Π‘ΠΈΠΌΠ²ΠΎΠ»().

Π›ΠΎΠ³ΠΈΠΊΠ° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° проста: ΠΌΡ‹ создаСм Ρ†ΠΈΠΊΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся ΠΎΡ‚ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ Π΄ΠΎ Π΄Π»ΠΈΠ½Ρ‹ строки Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ. На ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΡ‹ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ символ, находящийся Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, ΠΈ выполняСм Π½Π°Π΄ Π½ΠΈΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈΠ»ΠΈ прСобразования.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ создаСм ΡΡ‚Ρ€ΠΎΠΊΠΎΠ²ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π΅Ρ‘ символ Π² консоль ΠΈΠ»ΠΈ добавляСм Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ для дальнСйшСй ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

ВСкст = "Аналитика Π΄Π°Π½Π½Ρ‹Ρ…";

Π”Π»ΠΈΠ½Π° = Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(ВСкст);

Для ИндСкс = 1 По Π”Π»ΠΈΠ½Π° Π¦ΠΈΠΊΠ»

Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠ‘ΠΈΠΌΠ²ΠΎΠ» = Π‘ΠΈΠΌΠ²ΠΎΠ»(ВСкст, ИндСкс);

// Π›ΠΎΠ³ΠΈΠΊΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ символа

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("Π‘ΠΈΠΌΠ²ΠΎΠ» β„–" + ИндСкс + ": " + Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉΠ‘ΠΈΠΌΠ²ΠΎΠ»);

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠΌ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° являСтся ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ процСссом ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»Π΅Π³ΠΊΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ индСксы, ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ шаг Ρ†ΠΈΠΊΠ»Π° ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ сосСдним символам, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΡƒ индСксов. Однако, использованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π‘ΠΈΠΌΠ²ΠΎΠ»() Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° Π½Π° ΠΎΡ‡Π΅Π½ΡŒ Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… строках ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ΅Π½Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ, основанными Π½Π° массивах, ΠΈΠ·-Π·Π° Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов Π½Π° Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ.

Нюанс Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Surrogate Pairs

Ѐункция Π‘ΠΈΠΌΠ²ΠΎΠ»() Π² 1Π‘ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ суррогатныС ΠΏΠ°Ρ€Ρ‹. Если Π² строкС присутствуСт эмодзи, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰Π΅Π΅ Π΄Π²Π° Π±Π°ΠΉΡ‚Π° Π² UTF-16, функция Π²Π΅Ρ€Π½Π΅Ρ‚ Π΅Π³ΠΎ ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ логичСский символ, Π° Π½Π΅ ΠΊΠ°ΠΊ Π΄Π²Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… "ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈΠΊΠ°". Π­Ρ‚ΠΎ критичСски Π²Π°ΠΆΠ½ΠΎ ΠΏΡ€ΠΈ парсингС соврСмСнного тСкста.

ИспользованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° "Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ" ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΠΎΠΊ

Π‘ΠΎΠ»Π΅Π΅ соврСмСнный ΠΈ "ΠΈΠ΄ΠΈΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½Ρ‹ΠΉ" для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² использовании Ρ†ΠΈΠΊΠ»Π° Для КаТдого. Π­Ρ‚ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ позволяСт ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ элСмСнты ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ, Π½Π΅ Π·Π°Π±ΠΎΡ‚ΡΡΡŒ ΠΎ счСтчиках ΠΈ Π³Ρ€Π°Π½ΠΈΡ†Π°Ρ… массивов. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΊ строкС, Π΅Ρ‘ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² массив строк, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ символ.

Для прСобразования ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΠΎΠΊ(). Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт соотвСтствуСт ΠΎΠ΄Π½ΠΎΠΌΡƒ символу исходной строки. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ ΠΈ сниТаСт Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ошибок, связанных с Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° индСксов.

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° с использованиСм Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° чистоту синтаксиса ΠΈ отсутствиС явных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…-счСтчиков.

Π˜ΡΡ…ΠΎΠ΄Π½Π°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ° = "ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° символов";

МассивБимволов = Π˜ΡΡ…ΠΎΠ΄Π½Π°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ°.ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΠΎΠΊ();

Для КаТдого Π‘ΠΈΠΌΠ²ΠΎΠ» Из МассивБимволов Π¦ΠΈΠΊΠ»

// ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ символа

Если Π‘ΠΈΠΌΠ²ΠΎΠ» = " " Π’ΠΎΠ³Π΄Π°

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ; // ΠŸΡ€ΠΎΠΏΡƒΡΠΊΠ°Π΅ΠΌ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

// Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ°Ρ Π»ΠΎΠ³ΠΈΠΊΠ°

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

πŸ’‘

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ часто ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ символам ΠΏΠΎ индСксу Π² процСссС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ классичСский Ρ†ΠΈΠΊΠ». Массив, созданный ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΠΎΠΊ, ΡƒΠ΄ΠΎΠ±Π΅Π½ для ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π°, Π½ΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ.

Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ созданиС ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ массива Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ выдСлСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти. Для ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΡ… строк это Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ, Π½ΠΎ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ тСкстов объСмом Π² ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ‹ символов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π»ΠΎΠ³-Ρ„Π°ΠΉΠ»ΠΎΠ²) Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π½Π΅ΠΎΠΏΡ€Π°Π²Π΄Π°Π½Π½ΠΎΠΌΡƒ расходу рСсурсов сСрвСра.

Анализ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ

Π’Ρ‹Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° часто зависит ΠΎΡ‚ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ систСмы. Π’ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8 оптимизация ΠΊΠΎΠ΄Π° ΠΈΠ³Ρ€Π°Π΅Ρ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ, особСнно Π² высоконагруТСнных конфигурациях. Π Π°Π·Π½ΠΈΡ†Π° Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ†ΠΈΠΊΠ»ΠΎΠΌ Для ΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠΌ Для КаТдого с ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ созданиСм массива ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сущСствСнной Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΌΠ°Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

Π¦ΠΈΠΊΠ» Для с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π‘ΠΈΠΌΠ²ΠΎΠ»() Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ "Π½Π° Π»Π΅Ρ‚Ρƒ", Π½Π΅ создавая Π»ΠΈΡˆΠ½ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² памяти. Однако ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” это ΠΌΠΈΠΊΡ€ΠΎ-опСрация, которая суммируСтся Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… итСрациях. Π¦ΠΈΠΊΠ» Для КаТдого избавляСт ΠΎΡ‚ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π°, Π½ΠΎ ΠΏΠ»Π°Ρ‚ΠΈΡ‚ Π·Π° это Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Π½Π° созданиС массива ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ….

Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ сравнСниС характСристик ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… сцСнариСв использования:

ΠœΠ΅Ρ‚ΠΎΠ΄ Расход памяти Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ (ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ строки) Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ (Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ строки) Π§ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°
Π¦ΠΈΠΊΠ» Для + Π‘ΠΈΠΌΠ²ΠΎΠ»() ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Высокая БрСдняя БрСдняя
Для КаТдого + Массив Высокий Высокая Низкая (ΠΈΠ·-Π·Π° Π°Π»Π»ΠΎΠΊΠ°Ρ†ΠΈΠΈ) Высокая
РСгулярныС выраТСния Π‘Ρ€Π΅Π΄Π½ΠΈΠΉ Низкая Низкая Низкая (слоТный синтаксис)

Для Π·Π°Π΄Π°Ρ‡, Π³Π΄Π΅ трСбуСтся просто ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ символа ΠΈΠ»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π·Π°ΠΌΠ΅Π½Ρƒ, часто эффСктивнСС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ встроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ БтрНайти() ΠΈΠ»ΠΈ Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(), вмСсто Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π°. Они Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ядра ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрСС любого скриптового Ρ†ΠΈΠΊΠ»Π°.

πŸ’‘

Для Ρ€Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ нСбольшими строками Π²Ρ‹Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ (ΠΌΠ΅Ρ‚ΠΎΠ΄ с массивом). Для цикличСской ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚ΠΎΠ² тСкста Π² Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Ρ… заданиях ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΠ°ΠΌΡΡ‚ΡŒ (ΠΌΠ΅Ρ‚ΠΎΠ΄ с индСксом).

Π Π°Π±ΠΎΡ‚Π° с ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ символами

Одной ΠΈΠ· самых слоТных Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ тСкста являСтся коррСктная Ρ€Π°Π±ΠΎΡ‚Π° с символами, выходящими Π·Π° Ρ€Π°ΠΌΠΊΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ASCII ΠΈΠ»ΠΈ стандартной ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ Windows-1251. Π’ соврСмСнном ΠΌΠΈΡ€Π΅ тСксты часто содСрТат эмодзи, ΠΈΠ΅Ρ€ΠΎΠ³Π»ΠΈΡ„Ρ‹ ΠΈΠ»ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ матСматичСскиС Π·Π½Π°ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ UTF-16 (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π² 1Π‘) ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π΄Π²ΡƒΡ… Π±Π°ΠΉΡ‚.

ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° 1Π‘ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠ΅ символы Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… Π‘Ρ‚Ρ€ΠΎΠΊΠ°. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°() ΠΈ Π‘ΠΈΠΌΠ²ΠΎΠ»() ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ суррогатныС ΠΏΠ°Ρ€Ρ‹. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ графичСский символ (Π³Π»ΠΈΡ„) Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ систСмой ΠΊΠ°ΠΊ ΠΎΠ΄Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Π° Π΄Π»ΠΈΠ½Ρ‹, Π΄Π°ΠΆΠ΅ Ссли тСхничСски ΠΎΠ½ состоит ΠΈΠ· Π΄Π²ΡƒΡ… 16-Π±ΠΈΡ‚Π½Ρ‹Ρ… ΠΊΠΎΠ΄ΠΎΠ²Ρ‹Ρ… Π΅Π΄ΠΈΠ½ΠΈΡ†.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ экспортС строки Π² Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΉ массив (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅Ρ€Π΅Π· ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠ‘ΡƒΡ„Π΅Ρ€Π”Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ…Π”Π°Π½Π½Ρ‹Ρ…()) ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с внСшними ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΌΠΈ UTF-8, ΠΎΠ΄ΠΈΠ½ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ символ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΠΏΠ°ΡΡ‚ΡŒΡΡ Π½Π° нСсколько Π±Π°ΠΉΡ‚. Π‘ΡƒΠ΄ΡŒΡ‚Π΅ остороТны ΠΏΡ€ΠΈ смСшивании посимвольной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ 1Π‘ ΠΈ ΠΏΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²ΠΎ Π²Π½Π΅ΡˆΠ½ΠΈΡ… систСмах.

Если ваша Π·Π°Π΄Π°Ρ‡Π° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠ³ΠΎ прСдставлСния строки (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для расчСта ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ суммы ΠΈΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с сСтСвыми ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°ΠΌΠΈ), ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ символов строки 1Π‘ Π½Π΅ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚. Π’ этом случаС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ сначала ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строку Π² Π±ΡƒΡ„Π΅Ρ€ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ Π±Π°ΠΉΡ‚Ρ‹.

πŸ“Š Π‘ ΠΊΠ°ΠΊΠΈΠΌ Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ‹ Ρ‡Π°Ρ‰Π΅ всСго Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ тСкста?
Π‘Ρ‚Ρ€ΠΎΠΊΠ°
Массив строк
Π‘ΡƒΡ„Π΅Ρ€ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…
ΠŸΠΎΡ‚ΠΎΠΊ

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹: валидация ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ Π΄Π°Π½Π½Ρ‹Ρ…

ВСорСтичСскиС знания Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΠΊΡ€Π΅ΠΏΠ»ΡΡ‚ΡŒ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ. Рассмотрим Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ сцСнарий: очистка строки ΠΎΡ‚ нСдопустимых символов ΠΏΠ΅Ρ€Π΅Π΄ записью Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…. Допустим, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±ΡƒΠΊΠ²Ρ‹ ΠΈ Ρ†ΠΈΡ„Ρ€Ρ‹, ΡƒΠ΄Π°Π»ΠΈΠ² всС спСцсимволы.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π°, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ строку, добавляя Π² Π½Π΅Ρ‘ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹Π΅ Π·Π½Π°ΠΊΠΈ. Π­Ρ‚ΠΎ классичСская Π·Π°Π΄Π°Ρ‡Π° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ. Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠ° символа ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ БтрЧислоБтрок() Π² сочСтании с рСгулярными выраТСниями ΠΈΠ»ΠΈ простыми условиями сравнСния Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ².

Ѐункция ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒΠ‘Ρ‚Ρ€ΠΎΠΊΡƒ(Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉΠ’Π΅ΠΊΡΡ‚)

Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹Π΅Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ = "";

МассивБимв = Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉΠ’Π΅ΠΊΡΡ‚.ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΠΎΠΊ();

Для КаТдого Π‘ΠΈΠΌ Из МассивБимв Π¦ΠΈΠΊΠ»

КодБимвола = КодБимвола(Бим);

// ΠžΡΡ‚Π°Π²Π»ΡΠ΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π»Π°Ρ‚ΠΈΠ½ΠΈΡ†Ρƒ, ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Ρƒ ΠΈ Ρ†ΠΈΡ„Ρ€Ρ‹

Если (КодБимвола >= 1040 И КодБимвола <= 1103)

Или (КодБимвола >= 65 И КодБимвола <= 122)

Или (КодБимвола >= 48 И КодБимвола <= 57) Вогда

Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹Π΅Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ = Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹Π΅Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ + Π‘ΠΈΠΌ;

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹Π΅Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹;

ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

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

β˜‘οΈ Алгоритм подсчСта частоты символов

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ: 0 / 5

ЧастыС ошибки ΠΈ способы ΠΈΡ… прСдотвращСния

ΠŸΡ€ΠΈ написании ΠΊΠΎΠ΄Π° для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° строк Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ часто Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ»ΠΈ сниТСнию Π΅Ρ‘ быстродСйствия. Одной ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… ошибок являСтся ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ строки, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€, нСпосрСдствСнно Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π°.

Π’ 1Π‘ строки ΡΠ²Π»ΡΡŽΡ‚ΡΡ нСизмСняСмыми (immutable) Π² контСкстС ссылок, Π½ΠΎ пСрСмСнная ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π°. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ†ΠΈΠΊΠ» Для КаТдого ΠΏΠΎ массиву, созданному ΠΈΠ· строки, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ исходной строковой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π΅ повлияСт Π½Π° массив. Однако, Ссли Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ строку ΠΏΡƒΡ‚Π΅ΠΌ ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠΈ Π² Ρ†ΠΈΠΊΠ»Π΅ (Π‘Ρ‚Ρ€ΠΎΠΊΠ° = Π‘Ρ‚Ρ€ΠΎΠΊΠ° + Π‘ΠΈΠΌΠ²ΠΎΠ»), это создаСт ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ объСм Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠšΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΡ строк Π² Ρ†ΠΈΠΊΠ»Π΅ β€” опСрация с ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈΡ‡Π½ΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ O(n^2). Для сборки Π±ΠΎΠ»ΡŒΡˆΠΈΡ… тСкстов всСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π‘ΡƒΡ„Π΅Ρ€Π”Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ…Π”Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ Π—Π°ΠΏΠΈΡΡŒΠ’Π΅ΠΊΡΡ‚Π° с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ΠΌ, Π»ΠΈΠ±ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π‘ΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ() для массива строк.

Π’Π°ΠΊΠΆΠ΅ стоит ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ магичСских чисСл ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΊΠΎΠ΄Π°ΠΌΠΈ символов. ВмСсто ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Если Код > 32 Π’ΠΎΠ³Π΄Π°, Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ константы ΠΈΠ»ΠΈ понятныС условия, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ΄ оставался ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΌ для Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ².

ΠŸΠΎΡ‡Π΅ΠΌΡƒ нСльзя ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Π² Ρ†ΠΈΠΊΠ»Π΅?

ΠŸΡ€ΠΈ использовании Ρ†ΠΈΠΊΠ»Π° "Для КаТдого" ΠΏΠΎ массиву, ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ этого массива Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС выполнСния ΠΈΠ»ΠΈ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ повСдСнию, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ.

МоТно Π»ΠΈ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ строку Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС?

Π”Π°, для этого Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ классичСский Ρ†ΠΈΠΊΠ» Для. Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ счСтчик Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π‘Ρ‚Ρ€Π”Π»ΠΈΠ½Π°(Π‘Ρ‚Ρ€ΠΎΠΊΠ°), ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ условиС продолТСния По 1 ΠΈ шаг -1. Π¦ΠΈΠΊΠ» Для КаТдого всСгда ΠΈΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² прямом порядкС.

Как ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ символа Π² 1Π‘?

Для получСния числового ΠΊΠΎΠ΄Π° символа (Unicode) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ встроСнная функция КодБимвола(Π‘ΠΈΠΌΠ²ΠΎΠ»). Она Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ†Π΅Π»ΠΎΠ΅ число, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ символа Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Unicode.

Π§Ρ‚ΠΎ быстрСС: Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Ρ€ΡƒΡ‡Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€?

ВстроСнная функция Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ() всСгда Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ядра ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Π½Π° языкС C++. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ€ΡƒΡ‡Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π»ΠΎΠ³ΠΈΠΊΠ° Π·Π°ΠΌΠ΅Π½Ρ‹ слишком слоТна для стандартных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Как Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ строку Π½Π° массив символов ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° строки ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΠΎΠΊ(). Он Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт содСрТит Ρ€ΠΎΠ²Π½ΠΎ ΠΎΠ΄ΠΈΠ½ символ исходной строки. ΠŸΡƒΡΡ‚Ρ‹Ρ… элСмСнтов Π² Ρ‚Π°ΠΊΠΎΠΌ массивС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π»ΠΈ 1Π‘ рСгулярныС выраТСния для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π°?

Π”Π°, Π² 1Π‘ Π΅ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ РСгулярноСВыраТСниС. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ всС вхоТдСния шаблона Π² строкС, Ρ‡Ρ‚ΠΎ часто эффСктивнСС посимвольного ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° для Π·Π°Π΄Π°Ρ‡ поиска слоТных ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ².