2012-04-12 5 views
0

C++ STLを使用してAnsiStringをキリル文字に変換する最も簡単で最適な方法は何ですか? PHPで関数latin2cyrまたはその逆のC++

それは私が、STLコンテナを使用することを好む助けを必要と

<?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; 
    } 
?> 

だろう!

+0

AnsiStringをキリル文字に変換します。つまり、この 'encodestring'関数の* inverse *を実装しますか? (あなたが英語でコメントを投稿するといいですよ) – kennytm

+0

私は文字列をエンコードすることを意味します!例えば'samiev' ='самиев ' –

+0

OK。あなたの 'encodestring'は変換' encodestring( 'самиев')=== 'samiev''を実行するためです。 – kennytm

答えて

0

は、最後に私は自分のFUNCを書いて、それがうまく機能します!私はそれが私の仕事を完了するだろうが、最適化されていないと思う!このように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; 
} 

これを最適化する方法はありますか?

0

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

map letters = 
{{ "f", "ф"}, 
    { "h", "х"}, 
    //and so on 
}; 
関連する問題