Разбить строку на отдельные символы
- Войдите на сайт для отправки комментариев
Ср, 06/09/2017 - 17:03
Задача вроде бы не сложная. Разбить строку на отдельные символы. Но есть одно но - в строке по условию могут присутствовать и русские символы, и латиница, и цифры, и знаки препинания. Никакого универсального решения данной проблемы я пока не нашёл
К примеру, есть строка "You - это ты". Его нужно записать в некий массив как "Y", "o", "u", " ", "-", " ", "э" и т.д.
Ни char, ни substring мне пока не помогли, везде для выборки целого русского символа нужно резать как бы два
К примеру, есть строка "You - это ты". Его нужно записать в некий массив как "Y", "o", "u", " ", "-", " ", "э" и т.д.
А ГДЕ она есть? Она есть уже в массиве и потому, она уже разбита
Ни char, ни substring мне пока не помогли, везде для выборки целого русского символа нужно резать как бы два
Так ото-ж. Погуглите про wchar, а вообще, есть текст в юникове, то его и режут на двухбайтовые символы. В чём проблема?
Были такие мысли, но так и не понял, как это сделать?
Что? Про wchar погуглить? Ну, набираете wchar (можно прямо в строке адреса) и гуглите.
Что? Про wchar погуглить? Ну, набираете wchar (можно прямо в строке адреса) и гуглите.
Я хотел другое немного написать. Как строку преобразовать в массив wchar'ов. В инете нашел только про преобразование из типа wstring, в ардуино такого нет
Как строку преобразовать
Игорь, ну учитесь Вы задавать вопросы. Что такое "строку". Тип у неё какой?
Igor_Ryaboff, прежде, чем пытаться решить задачу, ее необходимо грамотно сформулировать.
В Вашей формулировке пока отсутствует очень важный момент - в какой колдировке Вы это хотите сделать.
Если это кодировка с фиксированным числом байтов на символ - это делается элементарно. Если же с переменным (например, UTF-8) - практически никак (можно, конечно, и здесь придумать решение, но оно будет очень корявым).
Если хотите более или менее вменяемое решение с UTF-8 - перекодируйте ее сначала в UTF-16 (либо, при ограниченном наборе символов, вероятно, в CP-1251).
PS. Есть еще один варинат, который в ряде случаев оказывается плодотворным: переформулировать основную задачу так, чтобы исчезла необходимость разбивать строку на отдельные символы.
Igor_Ryaboff, прежде, чем пытаться решить задачу, ее необходимо грамотно сформулировать.
В Вашей формулировке пока отсутствует очень важный момент - в какой колдировке Вы это хотите сделать.
Если это кодировка с фиксированным числом байтов на символ - это делается элементарно. Если же с переменным (например, UTF-8) - практически никак (можно, конечно, и здесь придумать решение, но оно будет очень корявым).
Если хотите более или менее вменяемое решение с UTF-8 - перекодируйте ее сначала в UTF-16 (либо, при ограниченном наборе символов, вероятно, в CP-1251).
PS. Есть еще один варинат, который в ряде случаев оказывается плодотворным: переформулировать основную задачу так, чтобы исчезла необходимость разбивать строку на отдельные символы.
Нет, мне нужно отельно обработать каждый символ в строке. Кодировка не важна, главное - чтобы можно было работать нормально с кириллицей. Если я выберу другую кодировку (например, cp1251), будет т ли русские буквы весить один байт?
Нет, если строка не ANSI.
>> Если я выберу другую кодировку (например, cp1251), будет т ли русские буквы весить один байт?
Да, или
Если вы придумаете свою кодировку для букв используемых в русском языке, то вам и 6 бит на символ хватит.
Это Вы думаете, что не важна. Если у Вас UTF-8, то для символа в ней не существует подходящего типа данных, следовательно, его придется изобретать самостоятельно и самостоятельно же писать все процедуры, относящиеся к его обработке (включая отведение памяти, вывод на печать, ВСЕ операции со строками...).
Да, кодировка CP1251 является однобайтовой кодировкой.
Собственно, из распространенных кодировок, содержащих кириллицу:
- UTF-16 является двухбайтовой,
- UTF-8 является кодировкой переменной длины,
- KOI-7R является семибитной.
- все остальные кодировки (CP1251, KOI-8R, IBM866, ISO-8859-5, русская Mac, основная ГОСТ, альтернативная ГОСТ) являются однобайтовыми.