C++Builder Tips


文字列の変換(半角⇔全角)


文字列を変換するサンプルです。



//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include <mbstring.h>
//---------------------------------------------------------------------------
AnsiString HanToZen(AnsiString str)
{
  AnsiString strw;
  char *c1;

  c1 = (char*)GlobalAlloc(GPTR, str.Length() * 2);

  LCMapString(GetUserDefaultLCID(),LCMAP_FULLWIDTH,
         str.c_str(),str.Length(),
         c1,str.Length()*2);
  strw = c1;
  GlobalFree(c1);
  return strw;
}

AnsiString ZenToHan(AnsiString str)
{
  AnsiString strw;
  char *c1;

  c1 = (char*)GlobalAlloc(GPTR, str.Length());

  LCMapString(GetUserDefaultLCID(),LCMAP_HALFWIDTH,
         str.c_str(),str.Length(),
         c1,str.Length());
  strw = c1;
  GlobalFree(c1);
  return strw;
}

AnsiString HiraToKata(AnsiString str)
{
  AnsiString strw;
  char *c1;

  c1 = (char*)GlobalAlloc(GPTR, str.Length());

  LCMapString(GetUserDefaultLCID(),LCMAP_HIRAGANA,
         str.c_str(),str.Length(),
         c1,str.Length());
  strw = c1;
  GlobalFree(c1);
  return strw;
}

AnsiString KataToHira(AnsiString str)
{
  AnsiString strw;
  char *c1;

  c1 = (char*)GlobalAlloc(GPTR, str.Length());

  LCMapString(GetUserDefaultLCID(),LCMAP_KATAKANA,
         str.c_str(),str.Length(),
         c1,str.Length());
         strw = c1;
  GlobalFree(c1);
  return strw;
}

AnsiString HanKToZen(AnsiString str)
{
  AnsiString strw;
  char *c1;
  char c2[3];
  char c3[3];

  c1 = (char*)GlobalAlloc(GPTR,str.Length()*2);

  strcpy(c1,str.c_str());

  for (unsigned int i=0;i<strlen(c1);i++){
     if (IsDBCSLeadByte(c1[i])){
       c3[0] = c1[i];
       c3[1] = c1[i+1];
       c3[2] = '\0';
       i++;
     }else if (_ismbbkana(c1[i])){
       if (i+1<strlen(c1) && ((unsigned char)c1[i+1]==0xde || (unsigned char)c1[i+1]==0xdf)){ //半角カナの濁点
         c2[0] = c1[i];
         c2[1] = c1[i+1];
         c2[2] = '\0';
         i++;
       }else{
         c2[0] = c1[i];
         c2[1] = '\0';
       }
       LCMapString(GetUserDefaultLCID(),LCMAP_FULLWIDTH,
              c2,strlen(c2)+1,
              c3,sizeof(c3));
     }else{
       c3[0] = c1[i];
       c3[1] = '\0';
     }
     strw += c3;
  }
  GlobalFree(c1);
  return strw;
}

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Edit1->Text = HanKToZen(Edit1->Text);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
  Edit2->Text = HanToZen(Edit2->Text);
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button3Click(TObject *Sender)
{
  Edit3->Text = ZenToHan(Edit3->Text);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)
{
  Edit4->Text = HiraToKata(Edit4->Text);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button5Click(TObject *Sender)
{
  Edit5->Text = KataToHira(Edit5->Text);
}
//---------------------------------------------------------------------------

DownLoad bcbtips085.lzh 4KB(BCB5)