关于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 }

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

时间: 2024-07-29 07:22:52

关于C++对汉字拼音的处理(2)的相关文章

C/C++ 获取汉字拼音首字母

1 #include <stdint.h> 2 #include <stdio.h> 3 #include <ctype.h> 4 #include <string.h> 5 6 bool between(uint32_t start,uint32_t end,uint32_t aim); 7 char get_first_letter(wchar_t wchar); 8 void get_first_letters(const char *szChines

ios/android获取汉字拼音首字母

android/ios开发如何获取汉字拼音的首字母? 提供的一个比较好的方案,是使用 c语言编写的一个算法,可以 在ios和 android.下面提供一个可以使用的代码,并且附上使用方法: /* * pinyin.c * Chinese Pinyin First Letter * * Created by George on 4/21/10. * Copyright 2010 RED/SAFI. All rights reserved. * */ #define HANZI_START 1996

Java 解析汉字拼音

需要java包 :pinyin4j-2.5.0.jar pinyin4j的使用很方便,一般转换只需要使用PinyinHelper类的静态工具方法即可: String[] pinyin = PinyinHelper.toHanyuPinyinStringArray('赵'); //该类还有其他的拼音转换形式,但是基本上用不到,就不介绍了 返回的数组即是该字符的拼音,如上例就是pinyin[0]=zhao,后面的数字代表声调,声调为5表示轻读,无声调.之所谓返回数组,是因为被判定的汉字有可能有多个读

提取汉字拼音的首字母

这个能取大部分汉字的首字母, 但还不全, 有些UNICODE的汉字是取不到的, 要想取到所有汉字的首字母,最好是能做一个UNICODE汉字和拼音的对照表,通过对照表查. GB2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个:同时,GB2312收录了包括拉丁字母.希腊字母.日文平假名及片假名字母.俄罗斯语西里尔字母在内的682个全形字符. GB2312的出现,基本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖99.75%的使用频率.GB2312中对所收汉字进行了"分

MySQL数据库获取多个汉字拼音的首字母函数

需求简介:最近的一个项目,想实现如下图所示的显示效果.很明显,如果能够获取对应的汉字词组中每个汉字的拼音首字母就可以实现了,如果是固定的几组汉字,人为的拼一下就可以 了,不过项目中有多处功能需要这个效果,并且事先也不知道对应的汉字是什么,所以就需要一个函数来完成这件事情了,根据网上查询的资料自己改进了一个 函数实现的效果,现分享如下. 1:阅读建议      如果你还没有看过我上一篇博文——MySQL数据库获取汉字拼音的首字母函数,强烈建议请先看一下,因为本篇博文是在她的基础之上写的,相关雷同的

中国省份城市列表(汉字+拼音)

-------------------中国省份和城市列表-------------------------- [ProvinceName] name.1=北京(BeiJing) name.2=上海(ShangHai) name.3=天津(TianJin) name.4=重庆(ChongQing) name.5=香港(XiangGang) name.6=澳门(Aomen) name.7=安徽(AnHui) name.8=福建(FuJian) name.9=广东(GuangDong) name.10

mysql根据汉字拼音排序查询

例如现在有一张数据表label,字段为id.name,此表的字符集设置为gb2312,以gb2312_chinese_ci整理. 设置InnoDB引擎的字符集也为简体中文,且整理为gb2312_chinese_ci. 查询语句如下: select * from label order_by name collate gb2312_chinese_ci; 效果如下: tip:有时候结果不是很准确,不知道是不是因为字符集选择的不当导致的,知道的朋友,请解答下,谢谢! mysql根据汉字拼音排序查询,

C# 获取汉字拼音首字母

最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精   本节探讨C#获取汉字拼音首字母的方法: 代码类东西,直接上代码: /// <summary> /// 在指定的字符串列表CnStr中检索符合拼音索引字符串 /// </summary> /// <param name="CnStr">汉字字符串</param> /// <returns&

oracle函数获取汉字拼音的首字母

CREATE OR REPLACE FUNCTION F_TRANS_PINYIN_CAPITAL(P_NAME IN VARCHAR2) RETURN VARCHAR2 AS V_COMPARE VARCHAR2(100); V_RETURN VARCHAR2(4000); FUNCTION F_NLSSORT(P_WORD IN VARCHAR2) RETURN VARCHAR2 AS BEGIN RETURN NLSSORT(P_WORD, 'NLS_SORT=SCHINESE_PINYI

取汉字拼音首字母的方法

近期在做一个按拼音首字母排序的ListView须要取汉字拼音首字母,Deomo下载地址:http://download.csdn.net/detail/u014649598/8494777,做了例如以下的方法: 代码例如以下: package com.android.pinyin; import java.io.UnsupportedEncodingException; import android.app.Activity; import android.os.Bundle; import a