**半角/全角の相互変換 [#i27fd699]
文字列内の半角を全角に変換したい場合や、その逆のケースと言うのはちょくちょくあります。~
私は下記のようなサブルーチンを作っています。~
このサブルーチンでは、変換に失敗した場合に空文字列を返しています。~
対象文字列を参照型で渡して、戻り値をbool型にするというのもいいのかな、と思います。~
~
 AnsiString __fastcall subExchangeString(AnsiString strDATA,int iTYPE)
 {
     //  文字列を半角<->全角間で変換を行う。
     //      iType : 1.全角->半角      2.半角->全角
     AnsiString strDT;
     char *buf;
     int i;
 
     try    {
         strDT = strDATA;
 
         //  バッファメモリの確保
         if (iTYPE == 1)
             i = CharLen(strDT.c_str()) + 2;     //  全角 -> 半角
         else
             i = CharLen(strDT.c_str()) * 2 + 2; //  半角 -> 全角
         buf = (char*)malloc(i);
 
         if (!strDT.IsEmpty())   {
             //  変換処理の実行
             switch (iTYPE)  {
                 case 1:     //  全角->半角
                     ::LCMapString(GetUserDefaultLCID(),LCMAP_HALFWIDTH,strDT.c_str(),
                                                             strDT.Length() + 1,buf,i);
                     break;
                 case 2:     //  半角->全角
                     ::LCMapString(GetUserDefaultLCID(),LCMAP_FULLWIDTH,strDT.c_str(),
                                                             strDT.Length() + 1,buf,i);
                     break;
                 default:    //  無変換
                     strcpy(buf,strDATA.c_str());
             }
 
             //  変換結果文字列を変数に格納
             strDT = AnsiString(buf);
 
             switch (iTYPE)  {
                 case 1:     //  変換結果に全角が含まれているかチェックする
                     for (i = 1;i < strDT.Length();i++) {
                         if (strDT.IsLeadByte(i))    {
                             //  全角文字が含まれる
                             strDT = "";
                             break;
                         }
                     }
                     break;
                 case 2:     //  変換結果に半角が含まれているかチェックする
                     for (i = 1;i < strDT.Length();i++) {
                         if (strDT.ByteType(i) == mbSingleByte)  {
                             //  半角文字が含まれる
                             strDT = "";
                             break;
                         }
                     }
                     break;
             }
         }
 
         //  バッファの解放
         free(buf);
     }
     catch(...)    {
         strDT = "";
     }
 
     //  変換結果を戻す
     return(strDT);
 }
トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS