Top / Programming / C++Builder / 全角・半角・ひらがな・カタカナの変換

全角・半角・ひらがな・カタカナの変換

LCMapString() を使うと、全角・半角・ひらがな・カタカナの変換ができます。

変換方法は、flagsの値で指定します。指定方法の詳細は「LCMapString」をご覧下さい。

C++Builder 2009以降(UnicodeString)の方法

プロジェクトの設定で、「_TCHARのマップ先」を「wchar_t」に設定しています。

#include <boost/scoped_array.hpp>

UnicodeString text = L"変換する文字列";
DWORD flags = LCMAP_FULLWIDTH; //全角文字にします。
//DWORD flags = LCMAP_HALFWIDTH; //半角文字にします。
//DWORD flags = LCMAP_HIRAGANA; //ひらがなにします。
//DWORD flags = LCMAP_KATAKANA; //カタカナにします。

const int size = text.Length() + 1;
boost::scoped_array<wchar_t> s(new wchar_t[size]);
ZeroMemory(s.get(), size * sizeof(wchar_t));
LCMapString(GetUserDefaultLCID(),
            flags,
            text.c_str(),
            size,
            s.get(),
            size);
UnicodeString newtext = s.get(); //変換した文字列

C++Builder 2007以前(AnsiString)の方法

AnsiString text = "変換する文字列";
//変換方法
DWORD flags = LCMAP_FULLWIDTH; //全角文字にします(適用される場合)。
//DWORD flags = LCMAP_HALFWIDTH; //半角文字にします(適用される場合)。
//DWORD flags = LCMAP_HIRAGANA; //ひらがなにします。
//DWORD flags = LCMAP_KATAKANA; //カタカナにします。
const int size = text.Length() * 2 + 1;
char* s = new char[size];
try
{
  ZeroMemory(s, size);
  LCMapString(GetUserDefaultLCID(),
              flags,
              text.c_str(),
              text.Length() + 1,
              s,
              size);
  AnsiString newtext = s; //変換した文字列
  return newtext;
}
__finally
{
  delete[] s;
}

更新履歴