ICU4C C++ ローマ字→カタカナ、ひらがな変換
IBMのICU4Cを使って
ローマ字→カタカナ
ローマ字→ひらがな
ひらがな→カタカナ
カタカナ→ひらがな
全角→半角
半角→全角
変換するプログラムを作ってみた。
例えば…
↓↓↓
aiueo → アイウエオ
aiueo → あいうえお
ひらがな → ヒラガナ
カタカナ → かたかな
ハンカク → ハンカク
zenkaku → zenkaku
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "unicode/translit.h" using namespace std; //変換関数 char* latin2katakana(UnicodeString text); char* latin2hiragana(UnicodeString text); char* hiragana2katakana(UnicodeString text); char* katakana2hiragana(UnicodeString text); char* full2half(UnicodeString text); char* half2full(UnicodeString text); int main(){ UnicodeString text="aiueo"; cout << latin2katakana(text) <<endl; cout << latin2hiragana(text) <<endl; cout << hiragana2katakana("ひらがな") <<endl; cout << katakana2hiragana("カタカナ") <<endl; cout << full2half("カタカナ") <<endl; cout << half2full("ABCD") <<endl; return 0; } //ローマ字→カタカナ変換関数 char* latin2katakana(UnicodeString text){ UErrorCode status = U_ZERO_ERROR; Transliterator *myTrans = myTrans->createInstance("Latin-Katakana",UTRANS_FORWARD,status); myTrans->transliterate(text); char* change=new char[text.length()+1]; text.extract(0,text.length(),change,"euc-jp"); return change; } //ローマ字→ひらがな変換関数 char* latin2hiragana(UnicodeString text){ UErrorCode status = U_ZERO_ERROR; Transliterator *myTrans = myTrans->createInstance("Latin-Hiragana",UTRANS_FORWARD,status); myTrans->transliterate(text); char* change=new char[text.length()+1]; text.extract(0,text.length(),change,"euc-jp"); return change; } //ひらがな→カタカナ変換関数 char* hiragana2katakana(UnicodeString text){ UErrorCode status = U_ZERO_ERROR; Transliterator *myTrans = myTrans->createInstance("Hiragana-Katakana",UTRANS_FORWARD,status); myTrans->transliterate(text); char* change=new char[text.length()+1]; text.extract(0,text.length(),change,"euc-jp"); return change; } //カタカナ→ひらがな変換関数 char* katakana2hiragana(UnicodeString text){ UErrorCode status = U_ZERO_ERROR; Transliterator *myTrans = myTrans->createInstance("Katakana-Hiragana",UTRANS_FORWARD,status); myTrans->transliterate(text); char* change=new char[text.length()+1]; text.extract(0,text.length(),change,"euc-jp"); return change; } //全角→半角変換関数 char* full2half(UnicodeString text){ UErrorCode status = U_ZERO_ERROR; Transliterator *myTrans = myTrans->createInstance("Fullwidth-Halfwidth",UTRANS_FORWARD,status); myTrans->transliterate(text); char* change=new char[text.length()+1]; text.extract(0,text.length(),change,"euc-jp"); return change; } //半角→全角変換関数 char* half2full(UnicodeString text){ UErrorCode status = U_ZERO_ERROR; Transliterator *myTrans = myTrans->createInstance("Halfwidth-Fullwidth",UTRANS_FORWARD,status); myTrans->transliterate(text); char* change=new char[text.length()+1]; text.extract(0,text.length(),change,"euc-jp"); return change; }