汉字转拼音方案总结

汉字转拼音:

采用哈希表方法,数组下标表示汉字的GB2312编码,存储内容为每个编码对应的汉字拼音,遇到一个汉字,先求其GB2312编码,然后根据编码快速得到汉字对应的拼音。

任意给定的文本文件可能是一个ASCII&GB2312混合编码的,其中ASCII编码是单字节表示,GB2312编码是双字节表示。在转化时,一次取一个字节,按以下步骤进行处理:

(1)    取一个字节,如果已没有字节可取(文件已处理完毕),则退出,否则,转向(2);

(2)    判断该字节是否为单字节,如果是单字节,则不做转化处理,回到下一步循环,即重复(1),否则转到(3);

(3)    取低字节,根据高字节和低字节联合判断是否为汉字字符,如果不是,则不做转化处理,转到(1),否则转到(4);

(4)    求其GB2312编码,根据编码得到对应拼音,然后转到(1)。

注:判断单字节的依据:高字节编码范围(即ASCII编码范围):(0x00<</span>高字节编码<0x80)

    判断双字节汉字字符的依据:高字节+低字节(即GB2312中汉字字符编码范围):(0xb0<=高字节编码<=0xf7 && 0xa1<=低字节编码<=0xfe)

部分程序源码如下所示:

char ** pin = new char*[10000]; //数组下标为汉字的GB2312编码值,

                                   //存储内容为每个编码对应的汉字拼音

    pin[1]="a";

    pin[2]="a";

    pin[3]="ai";

... ...

 

ifstream fin(strTxtFileName);       //待转化的文本文件

ofstream fout(strPinyinFileName);   //转化后的拼音文件

    char ch;

    unsigned char ucHigh, ucLow;      //分别存双字节字符的高低字节

    int  nCode;                        //存储汉字GB2312编码值

    char* strValue;                    //转化得到的汉字拼音

    while (!fin.eof()) {

 //过滤单字节字符

       ch = fin.get();

       ucHigh = (unsigned char)ch;

       if( ucHigh > 0x00 && ucHigh < 0x80)          

           continue;

//过滤掉双字节非中文字符

       ch = fin.get();

        ucLow  = (unsigned char)ch;

        if (ucHigh < 0xb0 || ucHigh >0xf7 || ucLow < 0xa1 || ucLow >0xfe)

            continue;

//获取汉字GB2312编码

        nCode = (ucHigh - 0xb0) * 100 + ucLow - 0xa0;

//根据汉字编码得到对应拼音

        strValue = pin[nCode];

       fout<<strValue<<"\n";

    }

    fin.close();

    fout.close();

delete [] pin; 

 

ASCII 码表:http://www.weste.net/tools/ASCII.asp

GB2312码表:http://www.knowsky.com/resource/gb2312tbl.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值