|
28 / 27 / 7
Регистрация: 11.06.2011
Сообщений: 387
|
|||||||
Как узнать длину строки, содержащей кириллицу?06.04.2015, 18:04. Показов 11521. Ответов 40
Метки нет (Все метки)
Сделал такой код
OS: Linux Локаль: ru_RU.UTF-8
0
|
|||||||
| 06.04.2015, 18:04 | |
|
Ответы с готовыми решениями:
40
Как узнать длину строки TCHAR?
|
|
|
|||||||
| 07.04.2015, 10:18 | |||||||
|
admsasha, используй библиотеку, которую предложили выше. Вот мой небольшой пример:
0
|
|||||||
|
28 / 27 / 7
Регистрация: 11.06.2011
Сообщений: 387
|
||||||
| 07.04.2015, 12:51 [ТС] | ||||||
|
DiffEreD, почему не просто
1
|
||||||
|
0 / 0 / 0
Регистрация: 01.08.2024
Сообщений: 1
|
||||||
| 27.11.2024, 20:27 | ||||||
0
|
||||||
|
87 / 87 / 18
Регистрация: 11.06.2018
Сообщений: 302
|
|
| 27.11.2024, 22:06 | |
|
JustDanya, я б на твоём месте постеснялся такое выкладывать.
0
|
|
|
7174 / 2351 / 354
Регистрация: 10.12.2013
Сообщений: 8,152
|
|||||||||||
| 28.11.2024, 00:21 | |||||||||||
|
разница между годом 2015 и годом 2024
ВОПРОС: C++; what library function compute length of the string with utf-8 characters ? ОТВЕТ: n C++, to compute the length of a string containing UTF-8 characters, the standard library function std::string::length() (or std::string::size()) will give you the number of bytes in the string, not the number of characters or code points, since UTF-8 characters can vary in length (from 1 to 4 bytes). If you want to compute the number of characters (code points) in a UTF-8 encoded string, you'll need to handle multi-byte sequences properly. Here’s how you can do it using the C++ Standard Library with UTF-8 encoded strings: Option 1: Using std::wstring and std::codecvt (C++11) Although C++11 doesn't directly handle UTF-8 to Unicode code points conversion, you can use the std::codecvt facet to convert a UTF-8 string to a wide-character string (std::wstring), and then get the length in terms of Unicode code points. This method is deprecated in C++17 and later, but it still works in C++11 and C++14. Option 2: Using std::u8string and manual decoding (C++17 onwards) For better support, starting with C++17, you can work with std::u8string (UTF-8 encoded string literal) and manually decode the string to get the number of code points. Here's how to do it: Example code using std::u8string:
This code defines a function count_utf8_characters that iterates over the UTF-8 string, recognizing the byte patterns for 1-byte, 2-byte, 3-byte, and 4-byte UTF-8 characters. It handles each character by checking the leading byte of the UTF-8 sequence to determine how many bytes to skip and then increments the count for each character. This ensures that you are counting the number of Unicode code points, not just the number of bytes. Output: For the string "Hello, 世界":
Important Considerations:
0
|
|||||||||||
|
274 / 206 / 30
Регистрация: 26.11.2022
Сообщений: 908
|
|
| 28.11.2024, 00:54 | |
|
самое забавное начинается дальше - ибо количество кодепоинтов в строке не всегда соответствует количеству символов.
некоторые символы получаются из двух кодепоинтов ))
0
|
|
|
639 / 397 / 68
Регистрация: 09.03.2016
Сообщений: 4,376
|
|||||||
| 28.11.2024, 01:27 | |||||||
|
Надо было и русские и английские символы туда поместить. Русские могут быть по два байта, а английские всегда однобайтные. (utf8) Тогда в натуре интересно будет. Добавлено через 28 минут
0
|
|||||||
|
639 / 397 / 68
Регистрация: 09.03.2016
Сообщений: 4,376
|
||||||
| 28.11.2024, 01:31 | ||||||
|
У меня таких ситуёвин не возникало. У меня в string вставляет ANSI. Я намоделировал. Вообще нормальные люди на винде делают так. Есть и на плюсах функции для конвертирования.
0
|
||||||
|
639 / 397 / 68
Регистрация: 09.03.2016
Сообщений: 4,376
|
||||||
| 28.11.2024, 01:56 | ||||||
|
Вот вам то же самое на плюсах.
0
|
||||||
|
639 / 397 / 68
Регистрация: 09.03.2016
Сообщений: 4,376
|
|
| 28.11.2024, 02:01 | |
|
0
|
|
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
||
| 28.11.2024, 10:03 | ||
|
Вообще, на мой взгляд, вопрос "сколько символов в строке utf8" - бессмысленный. Вернее сказать так: если он реально возникает, то в проекте у нас явно не в той кодировке всё используется. Как минимум в месте возникновения этого вопроса. Ибо если нам надо просто сохранять и строки и туда-сюда их гонять - то у нас не должно возникать вопросов "сколько в них символов", только "сколько байтов надо для хранения". А если нужна какая-то посимвольная обработка - то надо выбирать кодировки с фиксированным размером символа в байтах, иначе эффективности нам не видать. Хотя, в мире, где миллионы запросов и даже передача параметров между по сути функциями выполняется всякими джей-сонами - о какой вообще эффективности может идти речь ![]() Сплошное надругательство над природными ресурсами
1
|
||
|
Неэпический
|
|||
| 28.11.2024, 10:13 | |||
|
Всё что вам даст постоянство в байтах - количество code-point'ов.
0
|
|||
|
274 / 206 / 30
Регистрация: 26.11.2022
Сообщений: 908
|
||
| 28.11.2024, 12:54 | ||
|
А делать это приходится когда вы пытаетесь показать символы на экране или чтобы вписаться в размеры окна или области на экране. Поэтому utf8 предлагает вам просто сэкономить память ибо затраты на расчёт всё равно никуда не деть.
0
|
||
|
639 / 397 / 68
Регистрация: 09.03.2016
Сообщений: 4,376
|
||||||
| 28.11.2024, 12:59 | ||||||
|
Я эффективно на char изобретаю.
Русский / английский работает. А другие я не понимай.
0
|
||||||
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
|||
| 28.11.2024, 14:26 | |||
|
Короче, это какая-то философия пошла - что именно подразумевать под понятием "символ". Сначала надо о терминах договориться. В том числе и о рамках задачи "заменить символ в строке" - что именно под этим подразумевается. С другой стороны, тема топика "Как узнать длину строки, содержащей кириллицу?", что существенно сужает круг неоднозначностей, т.к. всё отлично умещается а) в кодировку с фиксированной длиной символа б) не возникает никаких проблем с combining characters. Добавлено через 1 минуту Добавлено через 2 минуты Я уже как-то высказывал здесь мысль, что задачи все эти - явно учебные, причем очень начального уровня. И явно взятые из методичек 30-ти летней давности, когда никаких проблем с utf-кодировками вообще не было у студентов. И вот мне очень не понятно: когда преподы до сих пор задают задачки всё из тех же методичек - что они подразумевают?
0
|
|||
|
639 / 397 / 68
Регистрация: 09.03.2016
Сообщений: 4,376
|
|
| 28.11.2024, 14:42 | |
|
0
|
|
|
639 / 397 / 68
Регистрация: 09.03.2016
Сообщений: 4,376
|
|
| 28.11.2024, 16:23 | |
|
0
|
|
|
639 / 397 / 68
Регистрация: 09.03.2016
Сообщений: 4,376
|
|
| 28.11.2024, 17:18 | |
|
А вообще серьёзно...
Наверное можно настроить компилятор, что бы он в string, utf8 не вписывал?
0
|
|
| 28.11.2024, 17:39 | |
|
0
|
|
| 28.11.2024, 17:39 | |
|
Как узнать длину строки? Как узнать длину строки в пикселях? Как узнать длину строки в байтах? Как узнать длину массива(строки) Как узнать длину строки в твипах? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге).
Задача:
Программно добавить префикс в нумерацию документов.
Решение:
В модуле объекта. . .
|
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
|
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него.
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952
Инструкция внутри.
https:/ / youtu. be/ VpfFZSUDGnQ. . .
|
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности.
Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
|
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|