Разбить строку на отдельные символы

Igor_Ryaboff
Offline
Зарегистрирован: 06.09.2017

Задача вроде бы не сложная. Разбить строку на отдельные символы. Но есть одно но - в строке по условию могут присутствовать и русские символы, и латиница, и цифры, и знаки препинания. Никакого универсального решения данной проблемы я пока не нашёл

К примеру, есть строка "You - это ты". Его нужно записать в некий массив как "Y", "o", "u", " ", "-", " ", "э" и т.д.

Ни char, ни substring мне пока не помогли, везде для выборки целого русского символа нужно резать как бы два

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Igor_Ryaboff пишет:

К примеру, есть строка "You - это ты". Его нужно записать в некий массив как "Y", "o", "u", " ", "-", " ", "э" и т.д.

А ГДЕ она есть? Она есть уже в массиве и потому, она уже разбита

Igor_Ryaboff пишет:

Ни char, ни substring мне пока не помогли, везде для выборки целого русского символа нужно резать как бы два

Так ото-ж. Погуглите про wchar, а вообще, есть текст в юникове, то его и режут на двухбайтовые символы. В чём проблема?

 

 

Igor_Ryaboff
Offline
Зарегистрирован: 06.09.2017

Были такие мысли, но так и не понял, как это сделать?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Что? Про wchar погуглить? Ну, набираете wchar (можно прямо в строке адреса) и гуглите.

Igor_Ryaboff
Offline
Зарегистрирован: 06.09.2017

ЕвгенийП пишет:

Что? Про wchar погуглить? Ну, набираете wchar (можно прямо в строке адреса) и гуглите.

Я хотел другое немного написать. Как строку преобразовать в массив wchar'ов. В инете нашел только про преобразование из типа wstring, в ардуино такого нет

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Igor_Ryaboff][quote=ЕвгенийП пишет:

Как строку преобразовать

Игорь, ну учитесь Вы задавать вопросы. Что такое "строку". Тип у неё какой?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Igor_Ryaboff, прежде, чем пытаться решить задачу, ее необходимо грамотно сформулировать.

В Вашей формулировке пока отсутствует очень важный момент - в какой колдировке Вы это хотите сделать.

Если это кодировка с фиксированным числом байтов на символ - это делается элементарно. Если же с переменным (например, UTF-8) - практически никак (можно, конечно, и здесь придумать решение, но оно будет очень корявым).

Если хотите более или менее вменяемое решение с UTF-8 - перекодируйте ее сначала в UTF-16 (либо, при ограниченном наборе символов, вероятно, в CP-1251).

 

PS. Есть еще один варинат, который в ряде случаев оказывается плодотворным: переформулировать основную задачу так, чтобы исчезла необходимость разбивать строку на отдельные символы.

Igor_Ryaboff
Offline
Зарегистрирован: 06.09.2017

andriano пишет:

Igor_Ryaboff, прежде, чем пытаться решить задачу, ее необходимо грамотно сформулировать.

В Вашей формулировке пока отсутствует очень важный момент - в какой колдировке Вы это хотите сделать.

Если это кодировка с фиксированным числом байтов на символ - это делается элементарно. Если же с переменным (например, UTF-8) - практически никак (можно, конечно, и здесь придумать решение, но оно будет очень корявым).

Если хотите более или менее вменяемое решение с UTF-8 - перекодируйте ее сначала в UTF-16 (либо, при ограниченном наборе символов, вероятно, в CP-1251).

 

PS. Есть еще один варинат, который в ряде случаев оказывается плодотворным: переформулировать основную задачу так, чтобы исчезла необходимость разбивать строку на отдельные символы.

Нет, мне нужно отельно обработать каждый символ в строке. Кодировка не важна, главное - чтобы можно было работать нормально с кириллицей. Если я выберу другую кодировку (например, cp1251), будет т ли русские буквы весить один байт?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Нет, если строка не ANSI.

toc
Offline
Зарегистрирован: 09.02.2013

>> Если я выберу другую кодировку (например, cp1251), будет т ли русские буквы весить один байт?

Да, или

Если вы придумаете свою кодировку для букв используемых в русском языке, то вам и 6 бит на символ хватит.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Igor_Ryaboff пишет:
Кодировка не важна, главное - чтобы можно было работать нормально с кириллицей.

Это Вы думаете, что не важна. Если у Вас UTF-8, то для символа в ней не существует подходящего типа данных, следовательно, его придется изобретать самостоятельно и самостоятельно же писать все процедуры, относящиеся к его обработке (включая отведение памяти, вывод на печать, ВСЕ операции со строками...).

Цитата:
Если я выберу другую кодировку (например, cp1251), будет т ли русские буквы весить один байт?

Да, кодировка CP1251 является однобайтовой кодировкой.

Собственно, из распространенных кодировок, содержащих кириллицу:

- UTF-16 является двухбайтовой,

- UTF-8 является кодировкой переменной длины,

- KOI-7R является семибитной.

- все остальные кодировки (CP1251, KOI-8R, IBM866, ISO-8859-5, русская Mac, основная ГОСТ, альтернативная ГОСТ) являются однобайтовыми.