0

C ++ STLを使用してAnsiStringをキリル文字に変換する最も簡単で最適な方法は何ですか?

PHPでは

<?php
  // функция превода текста с кириллицы в траскрипт
  function encodestring($st)
  {
    // Сначала заменяем "односимвольные" фонемы.
    $st=strtr($st,"абвгдеёзийклмнопрстуфхъыэ_",
    "abvgdeeziyklmnoprstufh'iei");
    $st=strtr($st,"АБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ_",
    "ABVGDEEZIYKLMNOPRSTUFH'IEI");
    // Затем - "многосимвольные".
    $st=strtr($st, 
                    array(
                        "ж"=>"zh", "ц"=>"ts", "ч"=>"ch", "ш"=>"sh", 
                        "щ"=>"shch","ь"=>"", "ю"=>"yu", "я"=>"ya",
                        "Ж"=>"ZH", "Ц"=>"TS", "Ч"=>"CH", "Ш"=>"SH", 
                        "Щ"=>"SHCH","Ь"=>"", "Ю"=>"YU", "Я"=>"YA",
                        "ї"=>"i", "Ї"=>"Yi", "є"=>"ie", "Є"=>"Ye"
                        )
             );
    // Возвращаем результат.
    return $st;
  }
?>

私はSTLコンテナを使用することを好みます、助けが必要です!

4

2 に答える 2

0

C++でも同じコードスタイルを使用できます。std::mapコンテナを見てください。最新の標準C++11では、非常に便利な方法で初期化することもできます。

map letters = 
 {{ "f", "ф"},
  { "h", "х"},
  //and so on
 };
于 2012-04-12T11:35:23.363 に答える
0

最後に私は自分の関数を書きました、そしてそれはうまくいきます!私はそれが私の仕事を成し遂げると思いますが、それほど最適化されていません!このようにmap.find()smthを使用しようとしましたが、....。

AnsiString Latin2Cyr(AnsiString inStr)
{
    int l=inStr.Length();
    if (!l) return "";

    AnsiString strLat[]={"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
    AnsiString strCyr[]={"а","б","с","д","е","ф","г","х","и","дж","к","л","м","н","о","п","к","р","с","т","у","в","у","кс","й","з"};
    AnsiString outStr="";
    typedef multimap<AnsiString,AnsiString> mmp;
    mmp mStr;
    int ln=(sizeof(strLat))/(sizeof(AnsiString));
    for (int i = 0; i < ln; i++) mStr.insert(mmp::value_type(strLat[i],strCyr[i]));
    AnsiString k=""; mmp::iterator it;
    for (int j = 1; j <l+1; j++) {
        for ( it=mStr.begin(); it!= mStr.end();++it ){
            outStr+=((*it).first==inStr.SubString(j,1))? (*it).second : k ;
        }
    }
    return outStr;
}

それを最適化するためのアイデアはありますか?

于 2012-04-12T14:34:37.767 に答える