Коммит b3d77027 создал по автору lagutinakv's avatar lagutinakv
Просмотр файлов

Add the section about strings

владелец 3a9c025b
......@@ -457,6 +457,26 @@ Copyright © 2016–2025 ООО «Открытая мобильн
[конспект](./foreach/lecture.md)
* [Тесты](./foreach/tests.md)
* Работа со строками
* [QChar, QString и QStringRef](./qstring)
* Лекция:
[cлайды](./qstring/lecture.fodp),
[конспект](./qstring/lecture.md)
* [Тесты](./qstring/tests.md)
* [Преобразования в QByteArray](./qbytearray)
* Лекция:
[cлайды](./qbytearray/lecture.fodp),
[конспект](./qbytearray/lecture.md)
* [Тесты](./qbytearray/tests.md)
* [Регулярные выражения в Qt](./qregexp)
* Лекция:
[cлайды](./qregexp/lecture.fodp),
[конспект](./qregexp/lecture.md)
* [Тесты](./qregexp/tests.md)
* [Алгоритмы на строках](./string_algorithms)
* Лекция:
[cлайды](./string_algorithms/lecture.fodp),
[конспект](./string_algorithms/lecture.md)
* [Тесты](./string_algorithms/tests.md)
* Многопоточность
* [Введение в многопоточность](./multithreading_base)
* Лекция:
......
Это отличие свёрнуто
# Преобразования в QByteArray
Copyright © 2016–2025 ООО «Открытая мобильная платформа».
Этот документ предоставляется в соответствии
с [Публичной лицензией Creative Commons с указанием авторства версии 4.0 Международная](../../LICENSE.CC-BY-4.0.ru.md).
## QByteArray — массив байтов
Класс QByteArray предоставляет массив байт.
Этот контейнер очень похож на QVector, но разница заключается в том, что это не шаблонный класс,
и в нем допускается хранение только элементов, имеющих размер один байт.
Объекты типа QByteArray можно использовать везде, где требуется промежуточное хранение данных.
Количество элементов массива можно задать в конструкторе, а доступ к ним получать при помощи оператора [].
QByteArray может быть использован для хранения строк.
Использование QByteArray более удобно, чем использование const char*.
Здесь всегда гарантировано, что данные завершаются '\0'.
Один из способов инициализации QByteArray - просто передать const char* в конструктор.
Код на слайде создает массив из 5 байт, содержащий данные "Hello".
QByteArray обладает всеми методами, присущими контейнеру, описанными ранее.
Помимо этого QByteArray обладает методами, возвращающими массив в преобразованном виде.
Поддерживаются преобразования в double, float, int, long, short в их беззнаковые аналоги, а также в шестнадцатеричное представление.
## Преобразование данных
Можно использовать метод toUtf8() для получения QByteArray, представляющего строку в кодировке UTF-8.
QDataStream позволяет сериализовать несколько типов данных, включая примитивные типы, в массив байтов для хранения или передачи по сети.
fromRawData(const char *data, int size)
Создаёт QByteArray, использующий первые size байтов массива данных.
Байты не копируются.
QByteArray будет содержать указатель на данные.
Вызывающий гарантирует, что данные не будут удалены или изменены, пока существует этот QByteArray и любые его копии, которые не были изменены.
QByteArray не становится владельцем данных, поэтому деструктор QByteArray никогда не удалит необработанные данные, даже если последний QByteArray, ссылающийся на эти данные, будет уничтожен.
# Тесты по теме «Преобразования в QByteArray»
Copyright © 2016–2025 ООО «Открытая мобильная платформа».
Этот документ предоставляется в соответствии
с [Публичной лицензией Creative Commons с указанием авторства версии 4.0 Международная](../../LICENSE.CC-BY-4.0.ru.md).
## Single choice
Что представляет собой класс QByteArray?
---
* Массив чисел с плавающей точкой
* **Массив байт**
* Контейнер для хранения объектов произвольного размера
* Набор символов Unicode
## Single choice
Каким способом осуществляется доступ к элементам QByteArray?
---
* **Через оператор []**
* С помощью специального итератора begin()
* Путём прямого изменения внутренней структуры
* Методами find() и next()
## Single choice
Что отличает QByteArray от обычного const char*?
---
* **Гарантированное завершение строки нулевым символом**
* Отсутствие автоматического завершения нулями
* Поддержка множественных записей в одном объекте
* Работа исключительно с целочисленными значениями
## Single choice
Какими возможностями обладают объекты QByteArray помимо стандартных методов контейнера?
---
* **Преобразование значений в разные форматы**
* Автономное шифрование содержимого
* Быстрая сортировка всех содержащихся элементов
* Фильтрация дублирующихся элементов
Это отличие свёрнуто
# Регулярные выражения в Qt
Copyright © 2016–2025 ООО «Открытая мобильная платформа».
Этот документ предоставляется в соответствии
с [Публичной лицензией Creative Commons с указанием авторства версии 4.0 Международная](../../LICENSE.CC-BY-4.0.ru.md).
## QRegExp — регулярные выражения
Класс QRegExp обеспечивает сопоставление с шаблоном с использованием регулярных выражений.
Регулярное выражение, или «regexp», — это шаблон для сопоставления подстрок в тексте. Это полезно во многих контекстах, например,
* Проверка. Регулярное выражение может проверить, соответствует ли подстрока определённым критериям, например, является ли она целым числом или не содержит пробелов.
* Поиск. Регулярное выражение обеспечивает более эффективное сопоставление с шаблоном, чем простое сопоставление подстрок, например, сопоставляет одно из слов «mail», «letter» или «corresponsion», но не сопоставляет ни одно из слов «email», «mailman», «mailer», «letterbox» и т. д.
* Поиск и замена. Регулярное выражение может заменить все вхождения подстроки другой подстрокой, например, заменить все вхождения & на &, за исключением случаев, когда за & уже следует amp;.
* Разбиение строк. Регулярное выражение можно использовать для определения места, где следует разбить строку, например, для разбиения строк, разделённых табуляцией.
QRegExp создан по образцу языка регулярных выражений Perl.
Он полностью поддерживает Unicode.
QRegExp также может использоваться в более простом режиме с подстановочными знаками, аналогичном функциональности командных оболочек.
Правила синтаксиса, используемые QRegExp, можно изменить с помощью setPatternSyntax().
В частности, синтаксис шаблона можно установить как QRegExp::FixedString, что означает, что шаблон для сопоставления интерпретируется как обычная строка, т.е. специальные символы (например, обратная косая черта) не экранируются.
## Пример QRegExp
Поиск можно осуществлять в прямом направлении с помощью функции indexIn() или в обратном направлении с помощью функции lastIndexIn().
Доступ к захваченному тексту можно получить с помощью функции captureTexts(), которая возвращает список всех захваченных строк, или с помощью функции cap(), которая возвращает захваченную строку для указанного индекса.
## QRegularExpression — регулярные выражения
В Qt 5 новый класс QRegularExpression обеспечивает совместимую с Perl реализацию регулярных выражений и рекомендуется вместо QRegExp.
Главное отличие заключается в том, что QRegularExpression просто хранит регулярное выражение и не изменяется при запросе на сопоставление.
Вместо этого возвращается объект QRegularExpressionMatch для проверки результата сопоставления и извлечения захваченной подстроки.
QRegularExpression полностью поддерживает Unicode.
Строку шаблона можно задать, передав строку в конструктор QRegularExpression.
Также можно использовать функцию setPattern() для установки шаблона для существующего объекта QRegularExpression.
В соответствии с правилами C++ для литеральных строк все обратные косые черты внутри строки шаблона должны экранироваться ещё одной обратной косой чертой.
Последние два аргумента функций match() и globalMatch() задают тип и параметры сопоставления.
Тип сопоставления — это значение перечисления QRegularExpression::MatchType; «традиционный» алгоритм сопоставления выбирается с использованием типа сопоставления NormalMatch (по умолчанию).
Также можно включить частичное сопоставление регулярного выражения со строкой-объектом.
Параметры сопоставления — это набор из одного или нескольких значений QRegularExpression::MatchOption.
Они изменяют способ сопоставления конкретного регулярного выражения со строкой-объектом.
## Примеры QRegularExpression
Для выполнения сопоставления достаточно вызвать функцию match(), передав ей строку для сопоставления.
Результатом функции match() является объект QRegularExpressionMatch, который можно использовать для проверки результатов сопоставления.
Если сопоставление успешно, для извлечения подстроки, соответствующей всему шаблону, можно использовать (неявный) номер группы захвата 0.
Объект QRegularExpressionMatch также содержит информацию о подстроках, захваченных группами в строке шаблона. Функция capture() вернет строку, захваченную n-й группой.
Захваченные группы в шаблоне нумеруются, начиная с 1, а неявная группа 0 используется для захвата подстроки, соответствующей всему шаблону.
# Тесты по теме «Регулярные выражения в Qt»
Copyright © 2016–2025 ООО «Открытая мобильная платформа».
Этот документ предоставляется в соответствии
с [Публичной лицензией Creative Commons с указанием авторства версии 4.0 Международная](../../LICENSE.CC-BY-4.0.ru.md).
## Single choice
Что такое регулярное выражение?
---
* Специальный вид файла, используемый для хранения данных
* **Шаблон для сопоставления подстрок в тексте**
* Инструмент для преобразования текста в код
* Алгоритм сортировки строк
## Single choice
Какие операции позволяют выполнять регулярные выражения?
---
* Проверка соответствия заданным критериям
* Эффективный поиск подстрок
* Замена подстрок и разбиение строк
* **Всё вышеперечисленное**
## Single choice
Какой метод используется для простого поиска совпадений с прямым направлением в классе QRegExp?
---
* lastIndexIn()
* indexOf()
* **indexIn()**
* search()
## Single choice
Что позволяет сделать функция setPattern() в классе QRegularExpression?
---
* **Устанавливает новое регулярное выражение для существующего объекта**
* Изменяет направление поиска в шаблоне
* Очищает кэшированные значения предыдущих поисков
* Добавляет дополнительные символы в шаблон
Это отличие свёрнуто
# QChar, QString и QStringRef
Copyright © 2016–2025 ООО «Открытая мобильная платформа».
Этот документ предоставляется в соответствии
с [Публичной лицензией Creative Commons с указанием авторства версии 4.0 Международная](../../LICENSE.CC-BY-4.0.ru.md).
## QChar — символ Unicode
Класс QChar представляет 16-битный символ Unicode.
В Qt символы Unicode представляют собой 16-битные сущности без какой-либо разметки или структуры.
Класс QChar представляет такую ​​сущность.
QChar легковесен, поэтому может использоваться повсеместно.
Большинство компиляторов обрабатывают его как unsigned short.
QChar предоставляет полный набор функций тестирования/классификации, преобразования в другие форматы и обратно, преобразования из составного Unicode в разложенный, а также сравнения и преобразования регистра.
Функции классификации: isNull() (возвращает true, если символ — '\0'), isPrint() (true, если символ является любым печатным символом, включая пробел), isPunct() (любой знак пунктуации), isMark() (знак Unicode), isLetter() (буква), isNumber() (любой числовой символ, кроме цифр от 0 до 9), isLetterOrNumber() и isDigit() (десятичные цифры).
Все они являются обёртками для функции category(), которая возвращает определённую в Unicode категорию каждого символа.
toLower() / toUpper() — функции для преобразования регистра символов в нижний и верхний соответственно.
Для QChar перегружены операторы ==, !=, <, <=, >, >=, <<, >>.
## QString — строка символов Unicode
Класс QString представляет собой строку символов Unicode.
QString обладает многими методами контейнеров, например, append(), remove(), count(), insert().
Но также QString обладает и собственными методами, например, arg(), split(), trimmed(),
startsWith(), endsWith(), toLower(), toUpper().
Метод arg() принимает на вход другую строку, которая будет подставляться вместо параметра внутри строки.
Пример с этим методом на следующем слайде.
Метод split() разбивает строку на подстроки и возвращает список подстрок.
Принимает на вход строку или регулярное выражение, которое будет являться разделителем, делящим строку на подстроки.
Метод trimmed() удаляет пробельные символы из строки и возвращает измененную строку.
Метод startsWith() возвращает true, если строка начинается со строки-аргумента метода.
Метод endsWith() возвращает true, если строка заканчивается строкой-аргументом метода.
Метод toLower() возвращает копию строки в нижнем регистре.
Метод toUpper() возвращает копию строки в верхнем регистре.
## QString: пример
Пример на экране демонстрирует использование описанных ранее методов QString.
Стоит обратить внимание на строку status, которая создается с помощью конструктора QString().
В конструктор передается строка с параметрами внутри в виде %1 и %2.
Чтобы подставить вместо параметров реальные значения используются методы arg(), которые вызываются
цепочкой друг за другом.
Строка fileName заменит %1, строка directory заменит %2.
Далее пример применения метода split(), куда в качестве разделителя передается строка с пробельным символом.
Методы trimmed(), toLower(), toUpper(), startsWith() и endsWith() используются понятным образом.
## QStringRef — оболочка для подстрок QString
Класс QStringRef представляет тонкую оболочку для подстрок QString.
QStringRef предоставляет подмножество API QString, доступное только для чтения.
QStringRef предназначен для повышения производительности обработки подстрок при работе с подстроками, полученными из существующих экземпляров QString.
QStringRef позволяет избежать накладных расходов на выделение памяти и подсчёт ссылок, характерных для стандартного QString.
Это может оказаться полезным в низкоуровневом коде, например, используемом в парсере.
Для большинства пользователей использование QStringRef вместо QString не имеет семантических преимуществ, поскольку QStringRef требует внимания к вопросам управления памятью, что потенциально усложняет написание и поддержку кода.
QStringRef действителен только до тех пор, пока существует указанная строка. Если исходная строка удалена, ссылка на строку указывает на недопустимую область памяти.
Ссылка на строку явно ссылается на часть строки string() с заданным размером size(), начиная с указанной позиции position(). Вызов toString() возвращает копию данных в виде реального экземпляра QString.
# Тесты по теме «QChar, QString и QStringRef»
Copyright&nbsp;©&nbsp;2016–2025 ООО&nbsp;«Открытая мобильная платформа».
Этот документ предоставляется в&nbsp;соответствии
с&nbsp;[Публичной лицензией Creative Commons с&nbsp;указанием авторства версии&nbsp;4.0 Международная](../../LICENSE.CC-BY-4.0.ru.md).
## Single choice
Какой класс используется для представления 16-битного символа Unicode?
---
* QString
* **QChar**
* QStringRef
* QByteArray
## Multiple choice
Какие операторы перегружены для класса QChar?
---
* +
* **==**
* -
* **<=**
* &
* **<<**
## Single choice
Что делает метод trimmed() класса QString?
---
* **Удаляет начальные и конечные пробельные символы**
* Преобразует строку в нижний регистр
* Разбивает строку на части
* Проверяет, что начало строки совпадает с указанным аргументом
## Single choice
Какой метод класса QString используется для замены переменных внутри строки формата %1, %2 и т.п.?
---
* **arg()**
* replace()
* substitute()
* format()
## Single choice
Почему класс QStringRef повышает производительность при обработке подстрок?
---
* **За счёт снижения затрат на выделение памяти и управление ссылками**
* Из-за поддержки регулярных выражений
* Благодаря возможности динамического выделения памяти
* Из-за поддержки преобразования регистра
## Single choice
Какой метод класса QString проверяет, начинается ли строка с указанного аргумента?
---
* **startsWith()**
* contains()
* beginsWith()
* matches()
## Single choice
Какое значение вернет метод category() класса QChar?
---
* **Категорию символа согласно стандарту Unicode**
* Значение символа в десятичной форме
* Номер символа в таблице кодировки, соответствующей ОС по умолчанию
* Номер символа в таблице кодировки Unicode
## Single choice
Что вернёт метод split() класса QString?
---
* **Список строк, полученных путём разделения строки по указанному разделителю**
* Подстроку, начинающуюся с указанной позиции
* Количество символов в строке
* Строку в обратном порядке
Это отличие свёрнуто
# Алгоритмы на строках
Copyright&nbsp;©&nbsp;2016–2025 ООО&nbsp;«Открытая мобильная платформа».
Этот документ предоставляется в&nbsp;соответствии
с&nbsp;[Публичной лицензией Creative Commons с&nbsp;указанием авторства версии&nbsp;4.0 Международная](../../LICENSE.CC-BY-4.0.ru.md).
## Поиск подстроки
Qt предлагает несколько способов выполнения поиска строк с использованием QString и связанных с ним классов.
QString::contains() проверяет, содержит ли строка определённый символ или подстроку.
QString::indexOf() возвращает индекс первого вхождения символа или подстроки.
Возвращает -1, если символ или подстрока не найдены.
QString::count() возвращает количество вхождений определённого символа или подстроки в строке.
QRegularExpression обеспечивает сопоставление с шаблоном, поиск и замену на основе регулярных выражений. Идеально подходит для сложных шаблонов или когда требуется большая гибкость, чем простое сопоставление подстрок.
QStringList::filter() извлекает новый список, содержащий только строки, содержащие определённую подстроку или соответствующие регулярному выражению.
## Проверка структуры строки
Для сложного сопоставления с шаблоном QRegularExpression — самый мощный инструмент.
Он позволяет определить шаблон строки с помощью синтаксиса регулярных выражений, а затем проверить, соответствует ли ему QString.
Для более простых проверок QString предлагает такие методы, как contains(), startingWith(), endsWith() и indexOf().
Чтобы проверить, представляет ли QString число (целое, число с плавающей точкой и т. д.), можно попробовать выполнить преобразование.
Для специфичных проверок на уровне символов можно перебрать QString и проверить отдельные элементы QChar.
## Редактирование строк
В Qt строки в основном обрабатываются классом QString.
Этот класс предоставляет большой набор функций для редактирования и обработки строковых данных.
Например, метод QString::replace() при использовании с объектом QRegularExpression позволяет заменить все вхождения шаблона на указанную строку.
QByteArray и QString позволяют работать со строкой как со списком символов и реализовывать соответствующие алгоритмы.
# Тесты по теме «Алгоритмы на строках»
Copyright&nbsp;©&nbsp;2016–2025 ООО&nbsp;«Открытая мобильная платформа».
Этот документ предоставляется в&nbsp;соответствии
с&nbsp;[Публичной лицензией Creative Commons с&nbsp;указанием авторства версии&nbsp;4.0 Международная](../../LICENSE.CC-BY-4.0.ru.md).
## Single choice
Какой метод класса QString возвращает количество вхождений определённой подстроки?
---
* find()
* contains()
* **count()**
* indexOf()
## Text
Что возвращает метод QString::indexOf(), если искомая подстрока не найдена?
---
* -1
## Single choice
Какой класс в Qt предназначен для проверки соответствия строки произвольному шаблону на основе регулярных выражений?
---
* QStringMatcher
* **QRegularExpression**
* QStringSearch
* QRegExpValidator
## Single choice
Метод QString::startsWith() служит для:
---
* Подсчёта числа вхождений подстроки
* Извлечения списка строк, соответствующих шаблону
* Замены подстроки в исходной строке
* **Проверки, начинается ли строка с указанной подстроки**
Поддерживает Markdown
0% или .
You are about to add 0 people to the discussion. Proceed with caution.
Сначала завершите редактирование этого сообщения!
Пожалуйста, зарегистрируйтесь или чтобы прокомментировать