![]() |
|
Модераторы: bsa |
![]()
|
|
| Proger10 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
Проблема возникает вот здесь:
Не очень понимаю каким образом считать количество букв. Оно мне считает количество байт видимо? Компилятор: GCC, MacOS, кодировка: Unicode у нас( Это сообщение отредактировал(а) Proger10 - 31.5.2013, 15:53 |
|||
|
||||
| Proger10 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
Использование wchar_t решает проблему:
А что обозначает буква "L" перед строкой? Какие беды можно ожидать от такого решения при компиляции под разными операционками? Это сообщение отредактировал(а) Proger10 - 31.5.2013, 16:27 |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
то что строка юникодовая (точнее, в расширенной кодировке). С русским языком опять могут возникнуть проблемы, при компиляции программ в Windows. Рекомендую отказаться от использования кириллицы в тексте программы, а вместо этого читать из файла русификации (читай про gettext). |
|||
|
||||
| Proger10 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
bsa
По поводу кириллицы в коде - конечно, у меня такого не будет, это я для теста сейчас пробую. А есть ли возможность работать с кириллицей (во внешних текстовых файлах) без gettext? Насколько я понял, это сторонняя библиотека, хотелось бы как можно меньше зависимостей с собой тащить. Мой проект: анализатор русскоязычного текста. Кодировка текстовых файлов: UTF-8. Есть ли возможность как-то стандартными средствами С++ поднимать этот текст и работать с ним (сортировать текст по алфавиту, искать вхождения букв, замерять длину текстовых подстрок), независимо от предпочтений операционки?) |
|||
|
||||
| Proger10 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
В википедии: http://ru.wikipedia.org/wiki/%D0%A8%D0%B8%...%B2%D0%BE%D0%BB
на эту тему написано: Тип wchar_t предназначен для хранения широких символов в том виде, в котором их понимают конкретные компиляторы, и это может не соответствовать Юникоду». Получается, что я не могу, через wchar_t организовать работу по получению инфы (кириличной) из текстовых файлов, обработки её, записи обратной для разных операционных систем? |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
если ты не хочешь тянуть сторонние библиотеки (iconv, например), то придется написать перекодировщик utf8 -> wide-string, wide-string -> utf8.
|
|||
|
||||
| Proger10 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
Спасибо! Наверное это наиболее удобный способ работы с UTF-8 кодировкой. UTF-8 можно хранить и в std::string, но с этим классом работать менее удобно, нежели с wstring. А в конечном итоге, всё равно, и то, и другое, перекодировать в UTF-8 прийдётся.
Добавлено через 11 минут и 32 секунды Ещё прочёл, что
может решить проблему и превратить wstring в нормальный UTF-8, а не UTF-16/32. Сработает ли такое для винды или там никакие LC_ALL не сработают? |
|||
|
||||
| Proger10 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
Весь день убил на поиски решений относительно этой темы. Жуть просто. Не пойму, чем С++ такой выдающийся, что в нём не встроили работу с UTF-8 кодировками, в то время как другие ЯП работают влёт? Или неанглоязычники такие неудачники? Или создатели языка и вовсе не знают, что помимо английского языка бывают ещё там какие-то. Но самое интересно и от прогеров С++ тоже никаких решений на эту тему не удалось найти.
Как я понимаю, решения два: - использовать для хранения UTF-8 класс std::string - и иметь гемор с посимвольным доступом и анализом текста в таком формате - использовать класс std::wstring и иметь гемор с конвертацией в UTF-8 и обратно. Писать самостоятельно такое очень нехочется - изобретая такой велосипед ошибиться можно, заколебаешься потом использовать такой софт Не пойму, как все работают с UTF-8 в С++? Неужели используя только внешние дополнительные библиотеки? Но цеплять отдельную внешнюю (Qt, GLib, GetText, Boost) только для посимвольного доступа... как-то крутова-то очень :( Добавлено через 9 минут и 37 секунд Почему мне необходимы как можно максимально-стандартизированное решение, так потому, что я не уверен, что внешняя библиотека сможет скомпилиться на тех жутких платформах, на которых я буду собирать проект с этой библиотекой. Пример таких платформ: Windows Phone и другие в таком духе. И встать в лужу из-за строк... сами понимаете... посему и нужно максимально-переносимое решение, которое только возможно. Это сообщение отредактировал(а) Proger10 - 31.5.2013, 21:50 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
просто больсчинству не приходится считать кол-во русских букв.. |
|||
|
||||
| Proger10 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
Подсчитать-то как раз не проблема
Проблема с посимвольным доступом к std::string в которой UTF-8... |
||||
|
|||||
| Proger10 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
Хотя, так если подумать, если я буду конвертить в wstring, то для отображений и для дальнейшей работы с другими библиотеками, мне всё равно нужен std::string, а насколько понимаю сконвертить wstring -> string - это ещё один гемор на голову) Чёрт, с какими же мне типами данных работать-то, если мне нужно делать простейший синтаксический анализатор русского текста, хранящийся в UTF-8?
Если получать буду в std::string - вроде хорошо. Но загвоздку пока вижу такую: как мне в другую переменную std::string присвоить третий символ из первой строки?) Т.е. грубо говоря что-то типа:
но ведь в str1 у меня вообще чёрти что, не фиксированный размер символов. Как их доставать, как понимать сколько занимает очередной символ и что там за символ? По сути, я знаю, что там у меня данные в формате UTF-8. Но чёрт.. чё с ними дальше-то делать Это сообщение отредактировал(а) Proger10 - 1.6.2013, 00:41 |
|||
|
||||
| Proger10 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
В общем, решил я попробовать справиться с работой UTF-8 + std::string, надеюсь Вы мне поможете с ответами на мои тупейшие вопросы, покуда в С++ я совсем не шарю
Сейчас я читаю спецификацию Unicode и представление UTF-8 в ней. Пытаюсь вывести строку UTF-8 и посмотреть с чем я дело имею:
В принципе, всё верно. Значения байт ниже 128 представляются ими же в ASCII кодах, то бишь это значения: 1, 2, 3, всё верно. Дальше они "видимо" ( |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| Proger10 |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
Спасибо!
Немного ещё продвинулся) Получаю код символа в unsigned char и сравниваю со значением 128. Вроде пока всё правильно отображает
Теперь надо подумать зачем я это получил
И видим, что если символ попадает от 0 до 127 включительно - то он однобайтовый, если от 128 до 2047 - то он двухбайтовый и т.д. Но вот тут-то сразу и возникает вопрос - а откуда у меня-то окажутся числа больше 255, они же невозможны в unsigned char. Соответственно, использовать другой тип данных вместо unsigned char? А какой? unsigned int? Тогда у меня совершенно дикие числа идут в вывод:
Как же здесь быть? По-моему что-то я уже напутал и относительно диапазонов UTF-8 там что-то другое имелось ввиду..) По чему же мы определяем вхождения в те диапазоны UTF-8, по очередному символу или по чему-то другому? Это сообщение отредактировал(а) Proger10 - 1.6.2013, 02:37 |
||||||
|
|||||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
под напильник (для длины из 3х символов)
Добавлено @ 12:17
Это сообщение отредактировал(а) mes - 1.6.2013, 14:30 |
||||
|
|||||
| Proger10 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
mes
Спасибо! Только не очень понял код Судя по количеству байт:
Не очень понял по Вашему коду, что обозначает число 0x07? Понял, что 0x7F - это проверка условия на значение большее, чем 127, но 0х07 - это, вроде бы, 7 в десятичной? А зачем эта проверка делается? Такое чего-то я нигде не читал( В целом смысл кода понятен, но откуда вот это число взялось непонятно. Кстати, я бы там в цикле не size(), а ( size() - 1 ) ставил бы, поскольку идёт выход за границу для s[ i + 1 ]. С substr - классный подход вообще получился! Спасибо! Добавлено через 10 минут и 47 секунд Не очень вообще понимаю как узнать в UTF-8 сколька байтный символ сейчас перед нами. Смотрю в таблицу: http://www.utf8-chartable.de/unicode-utf8-...24&utf8=dec я разложил там по 10-тичным значениям для удоства. http://www.utf8-chartable.de/unicode-utf8-...24&utf8=dec т.е.: 224 176 130, 224 176 134. Как их отличить-то? Все числа одновременно больше 127... Мне подумалось, может логика такая, что если очередное число больше 127, то следующее число добавляем в текущее... но нет ведь! Добавлено через 14 минут и 26 секунд Аа, вот оно что. Оказывается та инфа о диапазонах указывала на порядковый номер символа в ЮТФ кодировке. Ок: http://www.utf8-chartable.de/unicode-utf8-...24&utf8=dec т.е. начинающиеся с номера 2048, действительно, идут 3х-байтовыми. Но блин, как узнать какой у символа порядковый номер в ЮТФе? |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Добавлено @ 14:32
там было else забыто.. (поправил).. а насчет границ, так под напильник же ) Это сообщение отредактировал(а) mes - 1.6.2013, 14:39 |
|||
|
||||
| Proger10 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
Упс, всё равно не пойму, что именно Вы выделили полужирным
Вроде 0x000007FF в десятичной это: 2047, а 0х07 это 7 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
А что уже std::wstring str = L"123абв"; уже отменили ???
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| Proger10 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
Разве что я вижу такую зависимость в терминах десятичного счисления: если первое число больше 223, то отсюда начинаются уже трёхбайтные значения. Соответственно, нужно просто прочесать все такие диапазоны и поставить строгие условия, типа: если первый символ больше n, но меньше m, то соответственно он составляет столько-то байт.
Добавлено через 2 минуты и 47 секунд mes АА, понятно. Спасибо за ответ! Тем не менее, порыв таблицу, вроде я сориентировался уже. Спасибо Вам за помощь! Вы мне очень помогли! Плюсанул в репутацию |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
так и делается в примере.. Добавлено через 4 минуты и 50 секунд если вычесть диапазон, к которому принадлежит символ, то останется смещение символа в таблице для этого диапазона.. итого 4 таблицы разной длины (по длине диапазона) |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
ну ну, искатели приключений ...
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| Proger10 |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
Это я видел вчера) но тоже по-моему многова-то кода для такой, как я понял уже, простой задачи Добавлено через 36 секунд
А почему? Вроде всё же разрешилось легко? Добавлено через 6 минут и 56 секунд Кстати, вот единственное, что осталось ещё непонятым в UTF-8, так это вот это указание:
это о каком одном и том же символе речь идёт? Если например символ выглядит одинаково во многих языках, выбрать надо тот, порядковый номер, которого, короче? Так что ли? |
||||||
|
|||||||
| volatile |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
Что разрешилось то?
угу. еще свой СТЛ напишите, делов то... Команду тестеров нанять не забудьте только, по отлову багов... |
||||
|
|||||
| Proger10 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
volatile
Ну вроде задачу более-менее понял, попробую реализовать, а там посмотрю, может и правда гемор будет огромный, но пока вроде ничего беды не предвещает Правда у меня сейчас большая проблема в основах C++))) Я не знаю как мне в std::string вообще закидывать эти UTF-8 коды =) Не подскажете? =) Задача такая: знаю десятичные коды (да и любые удобные для системы), если десятичные то последовательность двух: "208 176" - это последовательность буквы "а". А вот как эту последовательность мне записать в std::string переменную? Добавлено @ 03:51 Хотя... полагаю, так?
Работает Это сообщение отредактировал(а) Proger10 - 2.6.2013, 04:18 |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
||||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
ну так wstring уже есть Добавлено через 1 минуту и 9 секунд на крайней случай есть еше std::basic_string Добавлено через 4 минуты и 49 секунд
если делаете для опыта, то посмотрите как решено в уже упомянутой utfcpp, а если для дела, то лучше отказаться от велосипеда, тем более при таком уровне вопросов.. Добавлено через 7 минут и 53 секунды а за свой код Вы уверенны, что он скомпилируется ? а если сторонняя библиотечка маленькая и аккуратная в ней к томуже можно легко поправить, как и в своем коде.. |
|||
|
||||
| Proger10 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 16.12.2008 Репутация: нет Всего: нет |
mes
По идее, да, но чего же класс-то таким разным получился, что на разных операционных системах представляется по-разному? С wstring ещё больше гемора, чем с UTFфным std::string Это сообщение отредактировал(а) Proger10 - 2.6.2013, 14:03 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
проблема не в wstring, а в базовом wchar`е.. используйте basic_string с нужным типом кирпича для вашей стены.. Вы сейчас сравниваете теплое с мягким... (w)string это всего лишь контейнер для хранения. А utf-8 это формат хранения текста в контейнере.. Недостаток utf-8 в переменной длине символа и в этом же ее преимушество. При этом хранить его можно как в string так и в wstring. Только при хранении в однобайтовом контейнере границы символа. В многобайтовой же строке для каждого символа есть свое место. Естественно при переносе текста между форматами хранения нужен конвертер. Добавлено через 5 минут и 1 секунду
опять же высказывание показывает непонимание происходящего и подмена обстоятельств.. |
|||
|
||||
| kolesnle |
|
|||
![]() Упертый сишник ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 22.3.2013 Репутация: нет Всего: нет |
||||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Proger10, кончай заниматься велосипедоизобретательством. Есть такая вещь в С++ называется locale. У всех потоков есть getloc и imbue, которые позволяют задать локаль. С ее помощью, можно сделать автоматическую конвертацию читаемые/записываемых данных между UTF-8 и wstring. Под линуксом это работает без проблем.
|
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
а затем функцию length(), возвращающую количество символов (не байт) в строке Это сообщение отредактировал(а) borisbn - 12.6.2013, 10:41 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| volatile |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
borisbn, ну кол-во символов теоретически можно написать,
а вот оператор [], написать нельзя, даже теоретически.
Добавлено через 6 минут и 17 секунд причем это первое что ТС собирался сделать из не так многого:
|
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
можно, если этот оператор будет оперировать не байтом |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
причем сложность будет линейная.
|
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
Естественно если писать wstring, то можно. Но там по условию ТС хранит UTF8 строку. оператор[] должен вернуть неконстантую ссылку, на символ из этой строки. хорошо, скажем мягче. я не знаю как писать такой оператор. Добавлено через 12 минут и 29 секунд Разве что с привлечение каких-то временных объектов... и постоянным конвертированием UTF8<->UTF16/32. но заставить такое глюкало корректно работать во всех режимах, врядли получицца... |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
ага, возвращением прокси объекта как будет свободное время напишу примерчик НИ о какой конвертации кодировок тут речи нет ! возможно из за путаницы понятий, подразумевается конвертация в многобайтовый контейнер ? да для внутреннего пользования можно и так хранить.. а можно динамично искать ну#ный порядковый номер, но тогда а в первом варианте нет.. |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
Не из-за путаницы понятий Да именно это я и имел ввиду. mes, примерчик-то написать можно. Сложность там будет в том чтобы А заставлять вас писать полный вариант - мне абсолютно не удобно. Работа большая и очень не благодарная. Это сообщение отредактировал(а) volatile - 16.6.2013, 00:21 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
позвольте узнать в чем глюкало ? разбить строку на символы ?! |
|||
|
||||
| mes |
|
||||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
чего то хорошей идеи для примера не пришло, вот накалякал пример прокси на скорую руку :
|
||||||||
|
|||||||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
> proxy((int*)&at(idx));
С русскими буквами в utf-8 работать не будет. Вернее, поведение будет отличаться от предполагаемого. Например, я бы хотел, чтобы в строке "привет мир" символ с индексом 3 был бы 'в' -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
нда.. эх.. чувствую придется писать полноценный пример, не смотря на лень Добавлено @ 17:49 для начала все ж
а если вместо replace_utf_char(_pos, value) ну и соотвественно вместо utf_index(idx) ? Это сообщение отредактировал(а) mes - 23.6.2013, 17:49 |
|||
|
||||
| volatile |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
mes, ну оно пока, даже и с английскими не работает:
такое вообще не компилируецца:
а если подредактировать проксю, чтобы возвращал себя, то компилировацца таки будет, но работать будет не правильно. короче, неблагодарное это дело.... |
||||||
|
|||||||
| zevs5 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 13.11.2006 Репутация: нет Всего: нет |
Спасибо за подсказку, три дня лазил по интернету и ничего не находил, а тут наткнулся и ниточка появилась. Еще раз спасибо. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
zevs5, это не совсем корректный пример. С кириллицей и латиницей он работать конечно будет, но если там будут иероглифы, то работать перестанет. Самый правильный способ - все операции с "буквами" и "символами" производить на строках из wchar_t.
описание wchar.h |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |