Стоит задача перевести строку QString в транслит (т.е. к примеру, русскую строку "привет мир" в "privet mir").
Хотелось бы узнать мнение, как лучше это сделать? Просто текст может быть очень большим.
Переводить все просто условиями, т.е. к примеру
if(str.at(i) == 'в') resultStr.append("v");
else if(str.at(i) == 'г') resultStr.append("g");
else if .....
...
Огромнейшее спасибо! QHash замечательно с этой задачей справляется! И шустро и без глюков!
Привет. Тут регекспами нада пользоваться, а точнее "покурите" replace.
Принцип транслитерации:
- Делаете ассоциативный массив, где ключем будет латинская буква, значением - кирилица.
- Делаете тот же foreach цикл, и в нем уже заменяете replace'ом все символы кирилицы на латиницу.
.....Не туда вроде написал (-:
wander86, регулярные выражения здесь ни к чему.
Litkevich Yuriy,
если уж делать транслит, то можно сделать и обратный таранслит.
я тоже подумал про ассоциативные массивы. буковок не так много что б прям QHash использование было оправдано...
ну тут дело вкуса.
Пишу функцию перевода строки в транслит, столкнулся с той же проблемой.
Если переводимую строку на русском указать в самой программе, то строка переводится. Но я загружаю её из файла, и ничего не работает, поэтому думаю, что проблема с кодировками.
В связи с этим хотелось бы узнать поподробнее про это:
void MainWindow::on_pushButton_2_clicked()
{
QString str = ui->lineEditTest->text();
//QString str = "строка на русском"; //если убрать этот коммент, то функция нормально переведет эту строку
QString result = "";
QHash<QChar,QString> trHash;
trHash.insert('а',"a"); trHash.insert('б',"b");
trHash.insert('в',"v"); trHash.insert('г',"g");
trHash.insert('д',"d"); trHash.insert('е',"ye");
trHash.insert('ё',"yo"); trHash.insert('ж',"zh");
trHash.insert('з',"z"); trHash.insert('и',"i");
trHash.insert('й',"y"); trHash.insert('к',"k");
trHash.insert('л',"l"); trHash.insert('м',"m");
trHash.insert('н',"n"); trHash.insert('о',"o");
trHash.insert('п',"p"); trHash.insert('р',"r");
trHash.insert('с',"s"); trHash.insert('т',"t");
trHash.insert('у',"u"); trHash.insert('ф',"f");
trHash.insert('х',"kh"); trHash.insert('ц',"c");
trHash.insert('ч',"ch"); trHash.insert('ш',"sh");
trHash.insert('щ',"sch"); trHash.insert('ъ',"");
trHash.insert('ы',"y"); trHash.insert('ь',"");
trHash.insert('э',"e"); trHash.insert('ю',"yu");
trHash.insert('я',"ya");
str = str.toLower();
for(int i=0;i<str.size();i++) {
qDebug() << str.at(i);
if(trHash.contains(str.at(i)) == true) {
result.append(trHash.value(str.at(i)));
}
else result.append(str.at(i));
}
ui->lineEditTest->setText(result);
}
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)