Перевод строки в транслит |
Здравствуйте, гость ( Вход | Регистрация )
Перевод строки в транслит |
++Norton++ |
4.11.2009, 23:50
Сообщение
#1
|
Студент Группа: Участник Сообщений: 98 Регистрация: 5.10.2008 Пользователь №: 380 Спасибо сказали: 0 раз(а) Репутация: 1 |
Стоит задача перевести строку QString в транслит (т.е. к примеру, русскую строку "привет мир" в "privet mir").
Хотелось бы узнать мнение, как лучше это сделать? Просто текст может быть очень большим. Переводить все просто условиями, т.е. к примеру
Или может есть какой-то более рациональный вариант? PS И хотелось бы тут же спросить, как правильно сравнивать символы в вышеприведенном случае? Сравнение как в примере выше не получается. Т.е. если есть слово "арбуз", то в данном случае в if буква 'а' вовсе не распознается как 'а'. Да и все остальные буквы также. В чем может быть дело? Сообщение отредактировал ++Norton++ - 5.11.2009, 0:28 |
|
|
Litkevich Yuriy |
5.11.2009, 3:50
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
то в данном случае в if буква 'а' вовсе не распознается как 'а'. какая из них русская, а какая английская?Или может есть какой-то более рациональный вариант? яб словарь использовал (QMap) или Хэш (QHash), последний быстрее работаетП.С. в коде: if(str.at(i) == 'в') resultStr.append("v"); лучше строковые не ASCII константы обернуть в некую функцию, например, QObject::tr() и указать библиотеке Qt кодировку исходника
|
|
|
++Norton++ |
5.11.2009, 10:57
Сообщение
#3
|
Студент Группа: Участник Сообщений: 98 Регистрация: 5.10.2008 Пользователь №: 380 Спасибо сказали: 0 раз(а) Репутация: 1 |
Огромнейшее спасибо! QHash замечательно с этой задачей справляется! И шустро и без глюков!
|
|
|
wander86 |
5.11.2009, 16:15
Сообщение
#4
|
Студент Группа: Участник Сообщений: 26 Регистрация: 8.6.2009 Из: Днепропетровск Пользователь №: 812 Спасибо сказали: 1 раз(а) Репутация: 0 |
Привет. Тут регекспами нада пользоваться, а точнее "покурите" replace.
Принцип транслитерации: - Делаете ассоциативный массив, где ключем будет латинская буква, значением - кирилица. - Делаете тот же foreach цикл, и в нем уже заменяете replace'ом все символы кирилицы на латиницу. .....Не туда вроде написал (-: |
|
|
Litkevich Yuriy |
5.11.2009, 17:25
Сообщение
#5
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
kwisp |
6.11.2009, 12:27
Сообщение
#6
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
Litkevich Yuriy,
если уж делать транслит, то можно сделать и обратный таранслит. я тоже подумал про ассоциативные массивы. буковок не так много что б прям QHash использование было оправдано... ну тут дело вкуса. |
|
|
Awesome |
29.1.2011, 0:08
Сообщение
#7
|
Новичок Группа: Новичок Сообщений: 7 Регистрация: 26.1.2011 Пользователь №: 2370 Спасибо сказали: 0 раз(а) Репутация: 0 |
Пишу функцию перевода строки в транслит, столкнулся с той же проблемой.
Если переводимую строку на русском указать в самой программе, то строка переводится. Но я загружаю её из файла, и ничего не работает, поэтому думаю, что проблема с кодировками. В связи с этим хотелось бы узнать поподробнее про это: лучше строковые не ASCII константы обернуть в некую функцию, например, QObject::tr() и указать библиотеке Qt кодировку исходника потому что я ничего не понял). Вот мой код, если что: Раскрывающийся текст
P.S. извините, что апаю старую тему (не знаю, ругаете вы это или нет) |
|
|
Текстовая версия | Сейчас: 12.12.2024, 6:12 |