中英文数字字母标点混合的情况,会自动过滤中文汉字和英文字母外的内容,如果取不到某个字符的拼音首字母就自动跳过。测试了下,基本上可以用。不过不是很完美,对某些汉字没办法取到首字母,比如现在很火的 “囧”,多音字也没办法处理。

  1. //根据汉字字符串返回首字母字符串
  2. #include <Windows.h>
  3. class GB2Alpha
  4. {
  5. public:
  6. GB2Alpha()
  7. {
  8. pAlpha = NULL;
  9. }
  10. ~GB2Alpha()
  11. {
  12. if (pAlpha)
  13. {
  14. delete[] pAlpha;
  15. pAlpha = NULL;
  16. }
  17. }
  18. //得到实际的拼音首字母buffer
  19. const char* GetAlpha(const char* pStr)
  20. {
  21. if (pAlpha)
  22. {
  23. delete pAlpha;
  24. pAlpha = NULL;
  25. }
  26. if (!pStr)
  27. {
  28. return NULL;
  29. }
  30. char   chr[3];
  31. wchar_t   wchr   =   0;
  32. unsigned int nlen = strlen(pStr);
  33. pAlpha = new char[nlen+1];
  34. memset(pAlpha,0x00,nlen+1);
  35. int nIndex = 0; //首字母数组的长度索引
  36. for (int i = 0;i< nlen ;)
  37. {
  38. char tmpchar = '\0';
  39. if (pStr[i] > 0) //非汉字
  40. {
  41. if (pStr[i] >= 'a' && pStr[i] <= 'z')
  42. {
  43. tmpchar = (char)(pStr[i] - 'a' + 'A');
  44. pAlpha[nIndex++] = tmpchar;
  45. }
  46. if (pStr[i] >= 'A' && pStr[i] <= 'Z')
  47. {
  48. tmpchar = pStr[i];
  49. pAlpha[nIndex++] = tmpchar;
  50. }
  51. i++;
  52. }
  53. else //汉字
  54. {
  55. memset(chr,   0x00,   sizeof(chr));
  56. chr[0]   =   pStr[i++];
  57. chr[1]   =   pStr[i++];
  58. chr[2]   =   '\0';
  59. wchr   =   0;
  60. wchr   =   (chr[0]   &   0xff)   <<   8;
  61. wchr   |=  (chr[1]   &   0xff);
  62. tmpchar = convert(wchr);
  63. if(tmpchar != '\0')
  64. {
  65. pAlpha[nIndex++] = tmpchar;
  66. }
  67. }
  68. }
  69. return pAlpha;
  70. }
  71. private:
  72. //汉字首字母转换表
  73. char   convert(wchar_t   n)
  74. {
  75. if   (In(0xB0A1,0xB0C4,n))   return   'A';
  76. if   (In(0XB0C5,0XB2C0,n))   return   'B';
  77. if   (In(0xB2C1,0xB4ED,n))   return   'C';
  78. if   (In(0xB4EE,0xB6E9,n))   return   'D';
  79. if   (In(0xB6EA,0xB7A1,n))   return   'E';
  80. if   (In(0xB7A2,0xB8c0,n))   return   'F';
  81. if   (In(0xB8C1,0xB9FD,n))   return   'G';
  82. if   (In(0xB9FE,0xBBF6,n))   return   'H';
  83. if   (In(0xBBF7,0xBFA5,n))   return   'J';
  84. if   (In(0xBFA6,0xC0AB,n))   return   'K';
  85. if   (In(0xC0AC,0xC2E7,n))   return   'L';
  86. if   (In(0xC2E8,0xC4C2,n))   return   'M';
  87. if   (In(0xC4C3,0xC5B5,n))   return   'N';
  88. if   (In(0xC5B6,0xC5BD,n))   return   'O';
  89. if   (In(0xC5BE,0xC6D9,n))   return   'P';
  90. if   (In(0xC6DA,0xC8BA,n))   return   'Q';
  91. if   (In(0xC8BB,0xC8F5,n))   return   'R';
  92. if   (In(0xC8F6,0xCBF0,n))   return   'S';
  93. if   (In(0xCBFA,0xCDD9,n))   return   'T';
  94. if   (In(0xCDDA,0xCEF3,n))   return   'W';
  95. if   (In(0xCEF4,0xD188,n))   return   'X';
  96. if   (In(0xD1B9,0xD4D0,n))   return   'Y';
  97. if   (In(0xD4D1,0xD7F9,n))   return   'Z';
  98. return   '\0';
  99. }
  100. bool   In(wchar_t   start,   wchar_t   end,   wchar_t   code)
  101. {
  102. if   (code   >=   start   &&   code   <=   end)
  103. {
  104. return   true;
  105. }
  106. return   false;
  107. }
  108. protected:
  109. char* pAlpha;
  110. };

C++实现获取汉字拼音首字母相关推荐

  1. php获取汉字的首字母,php获取汉字拼音首字母的方法

    现实中我们经常看到这样的说明,排名不分先后,按姓名首字母进行排序.这是中国人大多数使用的排序方法.那么在php程序中该如何操作呢? 下面就分享一下在php程序中获取汉字拼音的首字母的方法,在网上搜到的 ...

  2. Excel中如何获取汉字拼音首字母

    Excel中如何获取汉字拼音首字母 在工作中,为了方便查询.排序或者编码,需要生成汉字内容信息的首字母,如果信息很多的话,一个个录入是一件很麻烦的事情,下面给大家介绍一个便捷的方法,轻松获取汉字拼音首 ...

  3. iOS 获取汉字拼音首字母

    iOS获取汉字首字母 这个一般用在通讯里排序居多,我这里就是用到了通讯里的排序,然后就来mark一下,记录. 核心代码 char pinyinFirstLetter(unsigned short ha ...

  4. 【C#】获取汉字拼音首字母和全拼

    文章目录 利用CJK统一表意符号获取首字母 获取首字母和全拼 另附sql server解决方案 来源 java的同学可以了解下pinyin4j,js可以了解ChinesePY.js 获取拼音的意义多在 ...

  5. iOS获取汉字拼音首字母的方法

    iOS获取汉字拼音首字母的方法 之前在项目中需要根据昵称的首字母进行排序,蹚了几个坑,今天记录一下.其实iOS系统封装的就有获取汉字首字母的方法,但不推荐,想看最优解的同学直接略过: var name ...

  6. php获取拼音首字母排序,PHP获取汉字拼音首字母的方法

    PHP获取汉字拼音首字母的方法: function getfirstchar($s0){ $fchar = ord($s0{0}); if($fchar >= ord("A" ...

  7. 在delphi 7中实现获取汉字拼音首字母

    公司的餐饮系统出品的助记码,还没实现自动从出品名称获取汉字拼音首字母. 所以在网上找了三种解决方法, 一种是kaguo 的使用常用汉字拼音查找方法,这种代码十分简单,实现方便,但是这种代码仅仅是一级字 ...

  8. sqlserver 获取汉字拼音首字母

    sqlserver 获取汉字拼音首字母 调用方式: select dbo.fun_getPY('张三') as result 脚本: create function [dbo].[fun_getPY] ...

  9. 在Excel中如何获取汉字拼音首字母?

    转自:https://jingyan.baidu.com/article/0a52e3f43c3f6abf63ed7259.html百度经验 在Excel中如何获取汉字拼音首字母?| 在工作中,为了方 ...

  10. C# 获取汉字拼音首字母

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精   本节探讨C#获取汉字拼音首字母的方法: 代码类东西, ...

最新文章

  1. 百度AI“杀入”新领域,我举双手支持!
  2. BUU[SCTF2019]Who is he
  3. 如何定义一个 Listint,string 这样的 List ?
  4. 1056. Mice and Rice (25)
  5. [渝粤教育] 平顶山学院 区域分析与规划 参考 资料
  6. 给model模型传数组参数
  7. 登录首页时报错:java.lang.IllegalArgumentException (不合法的参数异常)
  8. 数学之美 第六章——信息的度量和作用
  9. Cortex-M0核芯片bootloader调试过程
  10. 知物由学 | AI与黑产的攻守之道,详解攻击类文字图像的检测
  11. 美国高考能不能带计算机,这件“神器”在美国被高中允许却被美国大学禁止
  12. 通用的WAN协议配置
  13. C#:Krypton控件使用方法详解(第九讲) ——kryptonRadioButton
  14. PTA 7-85 根据输入的空气污染指数,输出相应的信息。
  15. android 执行病毒,警惕安卓手机病毒Android/Fakeapp.ox
  16. Android-音视频学习系列-(九)Android-端实现-rtmp-推流,零基础如何成为高级Android开发
  17. iTutorGroup成为汇丰高尔夫冠军赛唯一官方语言培训机构
  18. RedHat-RHCE-RHEL8
  19. 基于Web SCADA平台构建气体计量系统及SCADA监控系统
  20. 如何优化 Mac 笔记本电脑的电池续航能力,解决电池问题

热门文章

  1. 初识DOM(文档对象模型)
  2. Gartner报告:多数CIO还未对数字化做好准备
  3. 如何让Div层悬浮在Flash Object对象之上(转载)
  4. 小米华为鸿蒙,华为鸿蒙比小米MIUI快,老外上手出结果
  5. MachineLearning经典图
  6. CentosRedhat下bcm43142博通无线网卡linux驱动之二
  7. 品高云产品经理邱洋:做国内云计算第一品牌
  8. 使用SQL语句的子查询批量复制表数据
  9. struts2.xml中使用chain和redirectAction这两个类型结果(type-result)时,报检查错误(validation)...
  10. Linux 与 Windows 计算文件夹大小