📖 Документация Qumir

← Вернуться в Playground

← Все примеры

Операции со строками

Работа со строками в КуМире: конкатенация, сравнение, индексация, поиск подстрок и Unicode.

Конкатенация

Строки объединяются оператором +:

лит а, б, результат
а := "Привет, "
б := "мир!"
результат := а + б
вывод результат, нс  | Привет, мир!

Сравнение строк

Строки сравниваются операторами =, <>, <, >:

лит строка1, строка2
строка1 := "яблоко"
строка2 := "груша"

если строка1 = строка2 то
    вывод "равны", нс
иначе
    вывод "не равны", нс
все

Сравнение лексикографическое (по кодам символов).

Длина и индексация

лит фраза
фраза := "Программирование"
вывод длин(фраза), нс      | 17

вывод фраза[1], нс          | П (первый символ)
вывод фраза[3], нс          | о (третий символ)
вывод фраза[1:7], нс        | Програм (срез)

Unicode

Работа с кодами Unicode-символов:

цел код
код := юникод("П")           | 1055
вывод юнисимвол(1055), нс    | П

Поиск подстроки

лит предложение
предложение := "Это тестовое предложение для теста"

цел позиция
позиция := поз(предложение, "тест")
вывод позиция, нс  | 5 (первое вхождение)

цел вторая
вторая := поз после(позиция + 1, предложение, "тест")
вывод вторая, нс  | 31 (второе вхождение)

Полная программа

алг строки
нач
    | Конкатенация строк (оператор +)
    вывод "=== Конкатенация строк ===", нс
    лит а, б, результат
    а := "Привет, "
    б := "мир!"
    результат := а + б
    вывод результат, нс
    вывод нс

    | Сравнение строк (=)
    вывод "=== Сравнение строк ===", нс
    лит строка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)
    вывод "Третье вхождение (не найдено): ", третья_поз, нс
    вывод нс

    вывод "=== Все примеры выполнены ===", нс
кон

▶ Запустить пример