随笔 - 25, 文章 - 0, 评论 - 6, 引用 - 0
数据加载中……

c++ 获取汉字首字母


#include 
<iostream>
#include 
<string>
using namespace std;

#define CONVERT(start, end, code, letter) if(code >= start && code <= end) return letter

char Convert(wchar_t n)
{
    
/// 根据汉字区域码获取拼音声母
    CONVERT(0xB0A10xB0C4, n, 'a');
    CONVERT(
0XB0C50XB2C0, n, 'b');
    CONVERT(
0xB2C10xB4ED, n, 'c');
    CONVERT(
0xB4EE0xB6E9, n, 'd');
    CONVERT(
0xB6EA0xB7A1, n, 'e');
    CONVERT(
0xB7A20xB8c0, n, 'f');
    CONVERT(
0xB8C10xB9FD, n, 'g');
    CONVERT(
0xB9FE0xBBF6, n, 'h');
    CONVERT(
0xBBF70xBFA5, n, 'j');
    CONVERT(
0xBFA60xC0AB, n, 'k');
    CONVERT(
0xC0AC0xC2E7, n, 'l');
    CONVERT(
0xC2E80xC4C2, n, 'm');
    CONVERT(
0xC4C30xC5B5, n, 'n');
    CONVERT(
0xC5B60xC5BD, n, 'o');
    CONVERT(
0xC5BE0xC6D9, n, 'p');
    CONVERT(
0xC6DA0xC8BA, n, 'q');
    CONVERT(
0xC8BB0xC8F5, n, 'r');
    CONVERT(
0xC8F60xCBF0, n, 's');
    CONVERT(
0xCBFA0xCDD9, n, 't');
    CONVERT(
0xCDDA0xCEF3, n, 'w');
    CONVERT(
0xCEF40xD188, n, 'x');
    CONVERT(
0xD1B90xD4D0, n, 'y');
    CONVERT(
0xD4D10xD7F9, n, 'z');
    
return '\0';
}


void Test_Invert()
{
    
string sChinese = "根据汉字区域码获取汉字首字母"// 输入汉字

    wchar_t wchr 
= 0;
    
int nCount = sChinese.length() / 2;
    
char* buff = new char[nCount];
    memset(buff, 
0x00sizeof(char)*nCount+1);

    
for (int i = 0, j = 0; i < nCount; ++i)
    
{
        wchr 
= (sChinese[j++& 0xff<< 8// 高字节
        wchr |= (sChinese[j++& 0xff);        // 低字节
        buff[i] = Convert(wchr);
    }


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






posted on 2013-05-31 13:01 chenjt3533 阅读(2083) 评论(0)  编辑 收藏 引用 所属分类: C/C++


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理