Напишите аналог std::string, но предполагающий, что внутри - UTF-8. Соответственно, нужно будет добавить/исправить методы:
- length() - число U8-символов
- push_back(unsigned int) - добавляет юникод по codepoint
- pop_back() - должен удалять последний символ (а не байт)
- is_well() - проверяет, является ли utf-8 строка корректной
- Итераторы - ходят по utf-8 символам
- Для хранения байтов и доступа к ним используется std::string.
- Корректность строки нужно проверять только при конструировании от std::string/char*, а также при операциях с ними.
- При обращении по индексу возвращается utf-8 символ в виде uchar=std::string.
- Кроме push_back(unsigned int) есть также push_back(uchar), добавляющий юникод, который хранится в uchar.
cmake . -Bbuild
cd build
make
make test
или
./tests/ustring_tests
Запуск в корне:
python3 tests/integr/ustring_test.py -p build/exe/ustring