C++实现查找汉字拼音首字母

转自:http://c.chinaitlab.com/cc/example/200903/778318.html

#include   <iostream>

#include   <string>
using   namespace   std;

static   char   convert(wchar_t   n);
static   bool   In(wchar_t   start,   wchar_t   end,   wchar_t   code);

int   main(int   argc,   char*   argv[])
{
    string   sChinese   =   "我爱中国";   //   输入的字符串

    char   chr[3];
    wchar_t   wchr   =   0;

    char*   buff   =   new   char[sChinese.length()/2];
    memset(buff,   0x00,   sizeof(char)*sChinese.length()/2+1);

    for   (int   i   =   0,   j   =   0;   i   <   (sChinese.length()/2);   ++i)
    {
        memset(chr,   0x00,   sizeof(chr));
        chr[0]   =   sChinese[j++];
        chr[1]   =   sChinese[j++];
        chr[2]   =   '\0';

        //   单个字符的编码   如:'我'   =   0xced2
        wchr   =   0;
        wchr   =   (chr[0]   &   0xff)   <<   8;
        wchr   |=   (chr[1]   &   0xff);

        buff[i]   =   convert(wchr);
    }

    cout   <<   "pin   yin   =   ["   <<   buff   <<   "]"   <<   endl;

    return   0;
}

char   convert(wchar_t   n)
{
    if   (In(0xB0A1,0xB0C4,n))   return   'a';
    if   (In(0XB0C5,0XB2C0,n))   return   'b';
    if   (In(0xB2C1,0xB4ED,n))   return   'c';
    if   (In(0xB4EE,0xB6E9,n))   return   'd';
    if   (In(0xB6EA,0xB7A1,n))   return   'e';
    if   (In(0xB7A2,0xB8c0,n))   return   'f';
    if   (In(0xB8C1,0xB9FD,n))   return   'g';
    if   (In(0xB9FE,0xBBF6,n))   return   'h';
    if   (In(0xBBF7,0xBFA5,n))   return   'j';
    if   (In(0xBFA6,0xC0AB,n))   return   'k';
    if   (In(0xC0AC,0xC2E7,n))   return   'l';
    if   (In(0xC2E8,0xC4C2,n))   return   'm';
    if   (In(0xC4C3,0xC5B5,n))   return   'n';
    if   (In(0xC5B6,0xC5BD,n))   return   'o';
    if   (In(0xC5BE,0xC6D9,n))   return   'p';
    if   (In(0xC6DA,0xC8BA,n))   return   'q';
    if   (In(0xC8BB,0xC8F5,n))   return   'r';
    if   (In(0xC8F6,0xCBF0,n))   return   's';
    if   (In(0xCBFA,0xCDD9,n))   return   't';
    if   (In(0xCDDA,0xCEF3,n))   return   'w';
    if   (In(0xCEF4,0xD188,n))   return   'x';
    if   (In(0xD1B9,0xD4D0,n))   return   'y';
    if   (In(0xD4D1,0xD7F9,n))   return   'z';
    return   '\0';
}

bool   In(wchar_t   start,   wchar_t   end,   wchar_t   code)
{
    if   (code   >=   start   &&   code   <=   end)
    {
        return   true;
    }
    return   false;

}

参考:http://www.chineselinuxuniversity.net/articles/20708.shtml

http://c.chinaitlab.com/cc/example/200903/778318.html

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值