/* 本程序只对GB2312编码有效 *//* 汉字读音分界点处的码值数组 */
static const unsigned short code_pin[] = {0xb0a1,0xb0a3,0xb0b0,0xb0b9,0xb0bc,0xb0c5,0xb0d7,0xb0df,0xb0ee,0xb0fa,0xb1ad,0xb1bc,0xb1c0,0xb1c6,0xb1de,0xb1ea,0xb1ee,0xb1f2,0xb1f8,0xb2a3,0xb2b8,0xb2c1,0xb2c2,0xb2cd,0xb2d4,0xb2d9,0xb2de,0xb2e3,0xb2e5,0xb2f0,0xb2f3,0xb2fd,0xb3ac,0xb3b5,0xb3bb,0xb3c5,0xb3d4,0xb3e4,0xb3e9,0xb3f5,0xb4a7,0xb4a8,0xb4af,0xb4b5,0xb4ba,0xb4c1,0xb4c3,0xb4cf,0xb4d5,0xb4d6,0xb4da,0xb4dd,0xb4e5,0xb4e8,0xb4ee,0xb4f4,0xb5a2,0xb5b1,0xb5b6,0xb5c2,0xb5c5,0xb5cc,0xb5df,0xb5ef,0xb5f8,0xb6a1,0xb6aa,0xb6ab,0xb6b5,0xb6bc,0xb6cb,0xb6d1,0xb6d5,0xb6de,0xb6ea,0xb6f7,0xb6f8,0xb7a2,0xb7aa,0xb7bb,0xb7c6,0xb7d2,0xb7e1,0xb7f0,0xb7f1,0xb7f2,0xb8c1,0xb8c3,0xb8c9,0xb8d4,0xb8dd,0xb8e7,0xb8f8,0xb8f9,0xb8fb,0xb9a4,0xb9b3,0xb9bc,0xb9ce,0xb9d4,0xb9d7,0xb9e2,0xb9e5,0xb9f5,0xb9f8,0xb9fe,0xbaa1,0xbaa8,0xbabb,0xbabe,0xbac7,0xbad9,0xbadb,0xbadf,0xbae4,0xbaed,0xbaf4,0xbba8,0xbbb1,0xbbb6,0xbbc4,0xbbd2,0xbbe7,0xbbed,0xbbf7,0xbcce,0xbcdf,0xbda9,0xbdb6,0xbdd2,0xbded,0xbea3,0xbebc,0xbebe,0xbecf,0xbee8,0xbeef,0xbef9,0xbfa6,0xbfaa,0xbfaf,0xbfb5,0xbfbc,0xbfc0,0xbfcf,0xbfd3,0xbfd5,0xbfd9,0xbfdd,0xbfe4,0xbfe9,0xbfed,0xbfef,0xbff7,0xc0a4,0xc0a8,0xc0ac,0xc0b3,0xc0b6,0xc0c5,0xc0cc,0xc0d5,0xc0d7,0xc0e2,0xc0e5,0xc1a9,0xc1aa,0xc1b8,0xc1c3,0xc1d0,0xc1d5,0xc1e1,0xc1ef,0xc1fa,0xc2a5,0xc2ab,0xc2bf,0xc2cd,0xc2d3,0xc2d5,0xc2dc,0xc2e8,0xc2f1,0xc2f7,0xc3a2,0xc3a8,0xc3b4,0xc3b5,0xc3c5,0xc3c8,0xc3d0,0xc3de,0xc3e7,0xc3ef,0xc3f1,0xc3f7,0xc3fd,0xc3fe,0xc4b1,0xc4b4,0xc4c3,0xc4ca,0xc4cf,0xc4d2,0xc4d3,0xc4d8,0xc4d9,0xc4db,0xc4dc,0xc4dd,0xc4e8,0xc4ef,0xc4f1,0xc4f3,0xc4fa,0xc4fb,0xc5a3,0xc5a7,0xc5ab,0xc5ae,0xc5af,0xc5b0,0xc5b2,0xc5b6,0xc5b7,0xc5be,0xc5c4,0xc5ca,0xc5d2,0xc5d7,0xc5de,0xc5e7,0xc5e9,0xc5f7,0xc6aa,0xc6ae,0xc6b2,0xc6b4,0xc6b9,0xc6c2,0xc6cb,0xc6da,0xc6fe,0xc7a3,0xc7b9,0xc7c1,0xc7d0,0xc7d5,0xc7e0,0xc7ed,0xc7ef,0xc7f7,0xc8a6,0xc8b1,0xc8b9,0xc8bb,0xc8bf,0xc8c4,0xc8c7,0xc8c9,0xc8d3,0xc8d5,0xc8d6,0xc8e0,0xc8e3,0xc8ed,0xc8ef,0xc8f2,0xc8f4,0xc8f6,0xc8f9,0xc8fd,0xc9a3,0xc9a6,0xc9aa,0xc9ad,0xc9ae,0xc9af,0xc9b8,0xc9ba,0xc9ca,0xc9d2,0xc9dd,0xc9e9,0xc9f9,0xcaa6,0xcad5,0xcadf,0xcba2,0xcba4,0xcba8,0xcbaa,0xcbad,0xcbb1,0xcbb5,0xcbb9,0xcbc9,0xcbd1,0xcbd4,0xcbe1,0xcbe4,0xcbef,0xcbf2,0xcbfa,0xcca5,0xccae,0xccc0,0xcccd,0xccd8,0xccd9,0xccdd,0xccec,0xccf4,0xccf9,0xccfc,0xcda8,0xcdb5,0xcdb9,0xcdc4,0xcdc6,0xcdcc,0xcdcf,0xcdda,0xcde1,0xcde3,0xcdf4,0xcdfe,0xcec1,0xcecb,0xcece,0xced7,0xcef4,0xcfb9,0xcfc6,0xcfe0,0xcff4,0xd0a8,0xd0bd,0xd0c7,0xd0d6,0xd0dd,0xd0e6,0xd0f9,0xd1a5,0xd1ab,0xd1b9,0xd1c9,0xd1ea,0xd1fb,0xd2ac,0xd2bb,0xd2f0,0xd3a2,0xd3b4,0xd3b5,0xd3c4,0xd3d9,0xd4a7,0xd4bb,0xd4c5,0xd4d1,0xd4d4,0xd4db,0xd4df,0xd4e2,0xd4f0,0xd4f4,0xd4f5,0xd4f6,0xd4fa,0xd5aa,0xd5b0,0xd5c1,0xd5d0,0xd5da,0xd5e4,0xd5f4,0xd6a5,0xd6d0,0xd6db,0xd6e9,0xd7a5,0xd7a7,0xd7a8,0xd7ae,0xd7b5,0xd7bb,0xd7bd,0xd7c8,0xd7d7,0xd7de,0xd7e2,0xd7ea,0xd7ec,0xd7f0,0xd7f2 };/* 汉字读音数组 */
static const char *str_pin[] = {"a","ai","an","ang","ao","ba","bai","ban","bang","bao","bei","ben","beng","bi","bian","biao","bie","bin","bing","bo","bu","ca","cai","can","cang","cao","ce","ceng","cha","chai","chan","chang","chao","che","chen","cheng","chi","chong","chou","chu","chuai","chuan","chuang","chui","chun","chuo","ci","cong","cou","cu","cuan","cui","cun","cuo","da","dai","dan","dang","dao","de","deng","di","dian","diao","die","ding","diu","dong","dou","du","duan","dui","dun","duo","e","en","er","fa","fan","fang","fei","fen","feng","fo","fou","fu","ga","gai","gan","gang","gao","ge","gei","gen","geng","gong","gou","gu","gua","guai","guan","guang","gui","gun","guo","ha","hai","han","hang","hao","he","hei","hen","heng","hong","hou","hu","hua","huai","huan","huang","hui","hun","huo","ji","jia","jian","jiang","jiao","jie","jin","jing","jiong","jiu","ju","juan","jue","jun","ka","kai","kan","kang","kao","ke","ken","keng","kong","kou","ku","kua","kuai","kuan","kuang","kui","kun","kuo","la","lai","lan","lang","lao","le","lei","leng","li","lia","lian","liang","liao","lie","lin","ling","liu","long","lou","lu","lv","luan","lue","lun","luo","ma","mai","man","mang","mao","me","mei","men","meng","mi","mian","miao","mie","min","ming","miu","mo","mou","mu","na","nai","nan","nang","nao","ne","nei","nen","neng","ni","nian","niang","niao","nie","nin","ning","niu","nong","nu","nv","nuan","nue","nuo","o","ou","pa","pai","pan","pang","pao","pei","pen","peng","pi","pian","piao","pie","pin","ping","po","pu","qi","qia","qian","qiang","qiao","qie","qin","qing","qiong","qiu","qu","quan","que","qun","ran","rang","rao","re","ren","reng","ri","rong","rou","ru","ruan","rui","run","ruo","sa","sai","san","sang","sao","se","sen","seng","sha","shai","shan","shang","shao","she","shen","sheng","shi","shou","shu","shua","shuai","shuan","shuang","shui","shun","shuo","si","song","sou","su","suan","sui","sun","suo","ta","tai","tan","tang","tao","te","teng","ti","tian","tiao","tie","ting","tong","tou","tu","tuan","tui","tun","tuo","wa","wai","wan","wang","wei","wen","weng","wo","wu","xi","xia","xian","xiang","xiao","xie","xin","xing","xiong","xiu","xu","xuan","xue","xun","ya","yan","yang","yao","ye","yi","yin","ying","yo","yong","you","yu","yuan","yue","yun","za","zai","zan","zang","zao","ze","zei","zen","zeng","zha","zhai","zhan","zhang","zhao","zhe","zhen","zheng","zhi","zhong","zhou","zhu","zhua","zhuai","zhuan","zhuang","zhui","zhun","zhuo","zi","zong","zou","zu","zuan","zui","zun","zuo"};/* 数组长度 */
static const size_t SIZE_ARRAY = sizeof(code_pin) / sizeof(short);#include <iostream>
#include <string>using std::string;
using std::cout;
using std::endl;/* 获取一个汉字的拼音 */
const char* get_pin(unsigned short char_zh)
{size_t low = 0, high = SIZE_ARRAY - 1;size_t index;while (high - low != 1)/* 类似,但不是折半查找 */{index = (low + high) / 2;if (char_zh == code_pin[index]) return str_pin[index];if (char_zh > code_pin[index]) low = index;else high = index;}return str_pin[char_zh >= code_pin[high] ? high : low];
}/* 将中英混合字符串转化成拼音形式 */
string str_to_pin(string const &input)
{string result ;// 返回值unsigned short char_zh;// 迭代汉字const size_t INPUT_LEN = input.length();unsigned char high_byte, low_byte;// 汉字的高低字节for (size_t i = 0; i < INPUT_LEN; ++i){high_byte = input[i];if (high_byte < 0x80) result.append(1, high_byte);else{low_byte = input[++i];char_zh = (high_byte << 8 ) + low_byte;result.append(get_pin(char_zh));}}return result;
}/* 将中英混合字符串转化成拼音形式,每个拼音后跟一个空格 */
string str_to_pin_space(string const &input)
{string result;// 返回值unsigned short char_zh;// 迭代汉字const size_t INPUT_LEN = input.length();unsigned char high_byte, low_byte;// 汉字的高低字节for (size_t i = 0; i < INPUT_LEN; ++i){high_byte = input[i];if(high_byte < 0x80){if (i > 0 && input[i-1] < 0) result.append(1, ' ');result.append(1, high_byte);}else{if(i > 0) result.append(1, ' ');low_byte = input[++i];char_zh = (high_byte << 8 ) + low_byte ;result.append(get_pin(char_zh));}}return result;
}/* 将中英及数字混合串转化成拼音,且每一连续部分之间放置一个空格。输入必须满足只有上述三种字符的情况,正确性需要由调用端保证。
*/
string str_to_pin_space_(string const &input)
{string result(1, ' ') ;// 返回值,以一个空格初始化unsigned short char_zh;// 迭代汉字const size_t INPUT_LEN = input.length();unsigned char high_byte, low_byte;// 汉字的高低字节for (size_t i = 0; i < INPUT_LEN; ++i){high_byte = input[i] ;if (high_byte < 58)// 数字字符{if (i > 0 && (input[i-1] < 0 || input[i-1] > 57)){result.append(1, ' ');}result.append(1, high_byte);}else if (high_byte > 64 && high_byte < 123)// 英文字符{if (i > 0 && (input[i-1] < 0 || input[i-1] < 58)){result.append(1, ' ');}result.append(1, high_byte);}else// 汉字字符{if(i > 0) result.append(1, ' ');low_byte = input[++i];// 低字节被赋值char_zh = (high_byte << 8 ) + low_byte ;result.append(get_pin(char_zh));}}return result;
}/* 测试代码 */
int main()
{cout << str_to_pin_space_("zhonghua人民dfd啊a152左边35gdaf共和国") << endl;return 0;
}

中英混串转拼音 源码相关推荐

  1. commons-math3-3.6.1-org.apache.commons.math3.analysis.function-包下的类(三)-中英对照文档及源码赏析

    commons-math3-3.6.1-org.apache.commons.math3.analysis.function-包下的类(三)-中英对照文档及源码赏析 摘要:中英对照文档.源码赏析.or ...

  2. commons-math3-3.6.1-org.apache.commons.math3.analysis.function-包下的类(二)-中英对照文档及源码赏析

    commons-math3-3.6.1-org.apache.commons.math3.analysis.function-包下的类(二)-中英对照文档及源码赏析 摘要:中英对照文档.源码赏析.or ...

  3. commons-math3-3.6.1-org.apache.commons.math3.analysis.integration-包下的类-中英对照文档及源码赏析

    commons-math3-3.6.1-org.apache.commons.math3.analysis.integration-包下的类-中英对照文档及源码赏析 摘要:中英对照文档.源码赏析.or ...

  4. commons-math3-3.6.1-org.apache.commons.math3.analysis.differentiation-包下的接口-中英对照文档及源码赏析

    commons-math3-3.6.1-org.apache.commons.math3.analysis.differentiation-包下的接口-中英对照文档及源码赏析 摘要:中英对照文档.源码 ...

  5. commons-math3-3.6.1-org.apache.commons.math3.analysis.integration.gauss-包下的类-中英对照文档及源码赏析

    commons-math3-3.6.1-org.apache.commons.math3.analysis.integration.gauss-包下的类-中英对照文档及源码赏析 摘要:中英对照文档.源 ...

  6. commons-math3-3.6.1-类-DSCompiler-中英对照文档及源码赏析

    commons-math3-3.6.1-类-DSCompiler-中英对照文档及源码赏析.md 摘要:中英对照文档.源码赏析.org.apache.commons.math3.analysis.dif ...

  7. Spring中AOP相关的API及源码解析,原来AOP是这样子的

    前言 之所以写这么一篇文章主要是因为下篇文章将结束Spring启动整个流程的分析,从解析配置到创建对象再到属性注入最后再将创建好的对象初始化成为一个真正意义上的Bean.因为下篇文章会涉及到AOP,所 ...

  8. Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析

    Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析 说明:Java生鲜电商平台中,由于服务进行了拆分,很多的业务服务导致了请求的网络延迟与性能消耗,对应的这些问题,我们 ...

  9. java arraylist 常用方法_分享ArrayList中的几个常用方法的源码

    jdk1.7.0_79 上文里解析了有关ArrayList中的几个常用方法的源码--<有关ArrayList常用方法的源码解析>,本文将对LinkedList的常用方法做简要解析. Lin ...

最新文章

  1. 14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3
  2. 网站优化中受欢迎的文章是怎样的?
  3. [刨根问底] 五分钟搞懂组合评价模型—模糊Borda (以2021 年大学生数模国赛C题为例)
  4. C语言中怎么用循环统计买法,C语言入门谭浩强版简单选择法冒泡法用数组和for循环进行学生成绩简单统计处理...
  5. 2019年11月~2020年7月CCF会议列表-计算机视觉计算机图形学
  6. Vue之跨域调用网易云音乐API及QQ音乐API
  7. 科来网络全流量安全分析系统[Study]
  8. MPI 初认识 (入门教程)
  9. 一文读懂人脸识别技术
  10. 备案指的是域名还是服务器?
  11. Ubuntu14.04安装wineqq国际版
  12. 26 分解质因子 容斥 数学公式
  13. iOS m3u8本地缓存播放(控制下载并发、暂停恢复)
  14. 计算机二级程序设计提交,程序设计方法与风格(计算机二级复习指导)
  15. 紫薇星上的Java——映射转换
  16. 使用clipboard.js实现复制内容至剪贴板
  17. 【笔记】DeepIGeoS: A Deep Interactive Geodesic Framework for Medical Image Segmentation
  18. Java基础编写记事本
  19. MTK介绍MTK平台介绍
  20. jQuery 效果- 隐藏和显示

热门文章

  1. 小学计算机培训返岗实践总结,民乐镇小学开展2018学年新教师汇报课暨新教师岗前培训返岗实践考核会...
  2. 2021-11-29 AndroidR WiFi可以上网,但是Settings里提示“No Internet”的问题的一个解决方法,通过ping一个网站确认网络的情况。java ping 网络的代码。
  3. Java 数字添加千分位
  4. 通过云库存管理遏制随需应变的自助服务风险
  5. 【BI学习作业17-智能供应链与评分卡模型】
  6. 同年同月同日出生的爱情
  7. 如何打造私域流量:构建流量池首先需要一个“数据池”
  8. go环境配置GO111MODULE出现go: unknown environment setting GO111MODULE=xxx的解决办法
  9. Adobe Premiere Pro 2021安装方法(附阿里云盘链接)
  10. JS中数组与对象的互相转换