获取汉字的拼音首字母
利用汉字拼音首字母进行快速检索,效率比直接检索汉字高很多。在ASCII编码中,汉字是按拼音首字母的顺序进行编码的,也就是说拼音首字母相同的汉字的编译是连续的、相对集中的。那么就可以通过比较汉字ASCII码的大小来确定其拼音首字母了。例如:如果汉字的ASCII码 n 满足 n >= 0xB0A1 && n <= 0xB0C4,说明该汉字的拼音首字母是A。
- 首先,写一个判断数值范围的辅助函数。
// 判断var的值是否处于两者之间
bool Between(int var, int lower, int upper)
{assert(upper >= lower);return (var >= lower) && var <= upper;
}
- 然后是获得一个汉字拼音首字母的函数。
char GetPinyinHead(const char * pszText)
{assert(strlen(pszText) == 2);unsigned char hi = static_cast<unsigned char>(pszText[0]);unsigned char low = static_cast<unsigned char>(pszText[1]);int val= unsigned short(hi << 8) +low;if (Between(val, 0xB0A1, 0xB0C4)) return 'A';if (Between(val, 0XB0C5, 0XB2C0)) return 'B';if (Between(val, 0xB2C1, 0xB4ED)) return 'C';if (Between(val, 0xB4EE, 0xB6E9)) return 'D';if (Between(val, 0xB6EA, 0xB7A1)) return 'E';if (Between(val, 0xB7A2, 0xB8c0)) return 'F';if (Between(val, 0xB8C1, 0xB9FD)) return 'G';if (Between(val, 0xB9FE, 0xBBF6)) return 'H';if (Between(val, 0xBBF7, 0xBFA5)) return 'J';if (Between(val, 0xBFA6, 0xC0AB)) return 'K';if (Between(val, 0xC0AC, 0xC2E7)) return 'L';if (Between(val, 0xC2E8, 0xC4C2)) return 'M';if (Between(val, 0xC4C3, 0xC5B5)) return 'N';if (Between(val, 0xC5B6, 0xC5BD)) return 'O';if (Between(val, 0xC5BE, 0xC6D9)) return 'P';if (Between(val, 0xC6DA, 0xC8BA)) return 'Q';if (Between(val, 0xC8BB, 0xC8F5)) return 'R';if (Between(val, 0xC8F6, 0xCBF0)) return 'S'; if (Between(val, 0xCBFA, 0xCDD9)) return 'T';if (Between(val, 0xCDDA, 0xCEF3)) return 'W';if (Between(val, 0xCEF4, 0xD188)) return 'X';if (Between(val, 0xD1B9, 0xD4D0)) return 'Y';if (Between(val, 0xD4D1, 0xD7F9)) return 'Z';return char(0);
}
- 最后实现一个取得中文字符串的函数。
string GetAllPinyinHeads(const char * pszText)
{string rst, temp;string strText = pszText;for (int i = 0; i < strText.length(); i++){if (strText[i] >= 0) // 大于等于0说明非汉字{rst += strText[i];}else{temp += strText[i];if (temp.length() == 2){rst += GetPinyinHead(temp.c_str());temp.clear();}}}return rst;
}
- 测试一下。
int _tmain(int argc, _TCHAR* argv[])
{string strTxt;while (cin>>strTxt){cout<<GetAllPinyinHeads(strTxt.c_str())<<endl;}return 0;
}
获取汉字的拼音首字母相关推荐
- C# 获取汉字的拼音首字母(转)
原文:https://blog.csdn.net/younghaiqing/article/details/62417269 一种是把所有中文字符集合起来组成一个对照表:另一种是依照汉字在Unicod ...
- C# 获取汉字的拼音首字母和全拼(含源码)
C# 获取汉字的拼音首字母 一种是把所有中文字符集合起来组成一个对照表:另一种是依照汉字在Unicode编码表中的排序来确定拼音的首字母.碰到多音字时就以常用的为准(第一种方法中可以自行更改,方法为手 ...
- (转)C# 获取汉字的拼音首字母和全拼(含源码)[A]
https://blog.csdn.net/younghaiqing/article/details/62417269 C# 获取汉字的拼音首字母 一种是把所有中文字符集合起来组成一个对照表:另一种是 ...
- java汉字转换拼音,获取汉字串拼音首字母
首先要下载 pinyin4j 的jar包 import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j ...
- java汉字的拼音首字母_Java 获取汉字的拼音首字母
Java 获取汉字的拼音首字母: pom.xml 引用 pinyin4j 包: com.belerweb pinyin4j 2.5.0 PinyinUtil 类: package com.xxx.co ...
- delphi读音_delphi中获取汉字的拼音首字母
这段代码处理范围比较广,对于双单字,较偏的字也都能处理,是目前比较流行且全面的在delphi中获取汉字的拼音首字母的代码. 1.以下代码段直接复制在代码里即可. {$R *.dfm} py: arra ...
- java获取汉字的拼音首字母_java获取汉字的拼音首字母
import java.io.UnsupportedEncodingException; /** * 取得给定汉字串的首字母串,即声母串 * Title: ChineseCharToEn * @dat ...
- js获取汉字的拼音首字母
前言 参考<JS获取中文拼音首字母,并通过拼音首字母快速查找页面内的中文内容> 自己写的在线示例
- vb.net获取汉字串拼音首字母
代码: Public Shared Function FirstSpell(strText As String) As StringDim py1 = Function(cnChar As Strin ...
最新文章
- OpenCV 2.4.9-2.4.13各个版本附加依赖项Lib文件汇总
- Eclipse编辑jsp、js文件时,经常出现卡死现象解决汇总
- 云原生应用 Kubernetes 监控与弹性实践
- 轨迹规划实现 tfaar_example2.7
- iview兼容ie8_如何解决iview在安卓4.4.4的webview中的兼容性
- 将centos字符编码换成utf-8
- maven设置从本地读_如何在Eclipse中更改Maven本地存储库
- 【蓝桥杯】题目 1117: K-进制数
- 作为一个程序员需要学多少技能?
- JAVA设计模式之3-抽象工厂模式
- 百度,google等搜索引擎的网络蜘蛛基本原理
- Windows下XMake编译imgui成功之DX11
- 三代测序组装软件-----La Jolla Assembler软件运行
- 滴滴2018秋招编程题
- 详解 ARM PMU (Performance Monitoring Unit)
- Django項目部署到Ubuntu服務器
- 【Mathematica】 最小二乘法
- 学习如逆水行舟,不进则退
- Huffman编码、Shannon编码、Fano编码——《小王子》文本压缩与解压
- android 全局缓存,【Android进阶】RecyclerView之缓存(二)