zoukankan      html  css  js  c++  java
  • 关于C++对汉字拼音的处理(2)

    对于前面获取字符串汉字全拼音的功能,大家应该有个了解了。现在我又综合广大网友流传的获取字符串汉字拼音首字母的功能进行了整理。介绍如下

    这个功能写的稍微有点复杂 使用3个函数解决了获取字符串汉字首拼音串的问题。

    代码如下:

     1 bool GetChineseCodeGBK(const char *pChineseCharacter, char *pGBK, const size_t nChineseCharacter = 3, const size_t nGBK = 5)
     2 {
     3     bool is_success = false;
     4 
     5     do 
     6     {
     7         int len = sprintf_s(pGBK, nGBK, "%X%X", (unsigned char)pChineseCharacter[0], (unsigned char)pChineseCharacter[1]);
     8         if (len<0)
     9             return is_success = false;
    10         else
    11             return is_success = true;
    12     } while (false);
    13 
    14     return is_success;
    15 }
     1 char GetFirstCharacter(const char *pGBK, const size_t nGBK = 5)
     2 {
     3     int nCode2 = atol(pGBK);//error
     4     int nCode = strtol(pGBK, NULL, 16);//ok
     5     int nCode3;
     6     sscanf_s(pGBK, "%x",&nCode3); //ok
     7     int areacode[] = { 45217, 45253, 45761, 46318, 46826, 47010, 47297, 47614, 48119, 48119, 49062, 49324, 49896, 50371, 50614, 50622, 50906, 51387, 51446, 52218, 52698, 52698, 52698, 52980, 53689, 54481, 55290 };
     8     for (int i = 0; i < 26; i++)
     9     {
    10         if (areacode[i] <= nCode && nCode < areacode[i + 1])
    11         {
    12             return (char)('A'+i);
    13         }
    14     }
    15     return (char)0;
    16 }
     1 std::string get_first_pinyin_string(const std::string &strHanzi)
     2 {
     3     std::string retFistPinyinString;
     4     char retFistPinyin;
     5 
     6 
     7     if (strHanzi.empty() == true)
     8     {
     9         return 0;
    10     }
    11 
    12     for (size_t i = 0; i < strHanzi.length(); ++i)
    13     {
    14         char GBK[5] = { 0 };
    15 
    16         if (static_cast<unsigned char>(strHanzi[i]) < 0x80)
    17         {
    18             retFistPinyinString += strHanzi[i];
    19             continue;
    20         }
    21 
    22         if (GetChineseCodeGBK(&strHanzi[i], GBK))
    23         {
    24             retFistPinyin = GetFirstCharacter(GBK);
    25             if ((char)0 != retFistPinyin)
    26             {
    27                 retFistPinyinString += retFistPinyin;
    28                 ++i;
    29             }
    30         }
    31     }
    32 
    33 
    34     return retFistPinyinString;
    35 }

    下面是测试代码

     1 int _tmain(int argc, _TCHAR* argv[])
     2 {
     3 
     4     std::string str_test10("任晓霞l2;哈哈哈mu男人");
     5     std::string str_test10_rt;
     6     str_test10_rt = get_first_pinyin_string(str_test10);
     7 
     8     
     9 
    10     return 0;
    11 }

    有兴趣的朋友可以试试啦。

  • 相关阅读:
    硅谷机场安装第一个咖啡机器人
    美国第一夫人,发推特更新她刚刚装饰好的白宫
    DAO设计模式
    高科技公司名字的由来
    项目管理的经验
    Shanghai InfoSys .NET engineer telephone interview
    {objccn.io}学习笔记-并发编程-常见的后台实践
    升级Xcode7之后VVDocumenter-Xcode不能用的解决办法
    推荐大家看的开发者博客
    iOS8 Layout Margins
  • 原文地址:https://www.cnblogs.com/superstargg/p/4378743.html
Copyright © 2011-2022 走看看