Операции со строками
Работа со строками в КуМире: конкатенация, сравнение, индексация, поиск подстрок и Unicode.
Конкатенация
Строки объединяются оператором +:
лит а, б, результат
а := "Привет, "
б := "мир!"
результат := а + б
вывод результат, нс | Привет, мир!
Сравнение строк
Строки сравниваются операторами =, <>, <, >:
лит строка1, строка2
строка1 := "яблоко"
строка2 := "груша"
если строка1 = строка2 то
вывод "равны", нс
иначе
вывод "не равны", нс
все
Сравнение лексикографическое (по кодам символов).
Длина и индексация
лит фраза
фраза := "Программирование"
вывод длин(фраза), нс | 17
вывод фраза[1], нс | П (первый символ)
вывод фраза[3], нс | о (третий символ)
вывод фраза[1:7], нс | Програм (срез)
длин(s)— длина строкиs[i]— символ по индексу (нумерация с 1)s[i:j]— подстрока от i до j включительно
Unicode
Работа с кодами Unicode-символов:
цел код
код := юникод("П") | 1055
вывод юнисимвол(1055), нс | П
юникод(символ)— получить код символаюнисимвол(код)— создать строку из кода
Поиск подстроки
лит предложение
предложение := "Это тестовое предложение для теста"
цел позиция
позиция := поз(предложение, "тест")
вывод позиция, нс | 5 (первое вхождение)
цел вторая
вторая := поз после(позиция + 1, предложение, "тест")
вывод вторая, нс | 31 (второе вхождение)
поз(строка, образец)— позиция первого вхождения (0 если не найдено)поз после(начало, строка, образец)— поиск после указанной позиции
Полная программа
алг строки
нач
| Конкатенация строк (оператор +)
вывод "=== Конкатенация строк ===", нс
лит а, б, результат
а := "Привет, "
б := "мир!"
результат := а + б
вывод результат, нс
вывод нс
| Сравнение строк (=)
вывод "=== Сравнение строк ===", нс
лит строка1, строка2, строка3
строка1 := "яблоко"
строка2 := "яблоко"
строка3 := "груша"
если строка1 = строка2 то
вывод "строка1 = строка2: истина", нс
все
если строка1 = строка3 то
вывод "строка1 = строка3: истина", нс
иначе
вывод "строка1 = строка3: ложь", нс
все
если строка3 < строка2 то
вывод "строка3 < строка2", нс
все
вывод нс
| юникод - получить код символа
вывод "=== Юникод (получить код символа) ===", нс
лит текст
сим символ_а
цел код, код_а
текст := "Привет"
код := юникод(текст[1])
вывод "Первый символ строки 'Привет': ", код, нс
символ_а := 'А'
код_а := юникод(символ_а)
вывод "Код символа 'А': ", код_а, нс
вывод нс
| юнисимвол - создать строку из кода символа
вывод "=== Юнисимвол (создать символ из кода) ===", нс
цел код1, код2, код3, код4, код5, код6
лит слово
код1 := 1055 | П
код2 := 1088 | р
код3 := 1080 | и
код4 := 1074 | в
код5 := 1077 | е
код6 := 1090 | т
слово := юнисимвол(код1) + юнисимвол(код2) + юнисимвол(код3) + юнисимвол(код4) + юнисимвол(код5) + юнисимвол(код6)
вывод "Слово из кодов: ", слово, нс
вывод нс
| Индексация строк
вывод "=== Индексация строк ===", нс
лит фраза, первый, третий, подстрока, окончание
цел длина
фраза := "Программирование"
длина := длин(фраза)
вывод "Строка: ", фраза, нс
вывод "Длина строки: ", длина, нс
первый := фраза[1]
вывод "Первый символ (индекс 1): ", первый, нс
третий := фраза[3]
вывод "Третий символ (индекс 3): ", третий, нс
подстрока := фраза[1:7]
вывод "Подстрока [1:7]: ", подстрока, нс
окончание := фраза[8:16]
вывод "Подстрока [8:16]: ", окончание, нс
вывод нс
| поз - найти позицию подстроки
вывод "=== Поиск подстроки (поз) ===", нс
лит предложение, образец, не_найдено
цел позиция, поз_не_найден
предложение := "Это тестовое предложение для теста"
образец := "тест"
позиция := поз(предложение, образец)
вывод "Строка: ", предложение, нс
вывод "Ищем: ", образец, нс
вывод "Первое вхождение на позиции: ", позиция, нс
не_найдено := "xyz"
поз_не_найден := поз(предложение, не_найдено)
вывод "Ищем: ", не_найдено, нс
вывод "Результат (не найдено): ", поз_не_найден, нс
вывод нс
| поз после - найти позицию подстроки после заданной позиции
вывод "=== Поиск следующего вхождения (поз после) ===", нс
лит текст2, образец2
цел первая_поз, вторая_поз, третья_поз
текст2 := "Это тестовое предложение для теста"
образец2 := "тест"
первая_поз := поз(текст2, образец2)
вывод "Первое вхождение 'тест': ", первая_поз, нс
вторая_поз := поз после(первая_поз + 1, текст2, образец2)
вывод "Второе вхождение 'тест' (поиск после позиции ", первая_поз + 1, "): ", вторая_поз, нс
третья_поз := поз после(вторая_поз + 1, текст2, образец2)
вывод "Третье вхождение (не найдено): ", третья_поз, нс
вывод нс
вывод "=== Все примеры выполнены ===", нс
кон