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 *szChinese,char piyinBuf[],const uint32_t maxBufLen,uint32_t &piyinBufLen);
 9
10
11 int32_t main()
12 {
13     char buf[1024] = {0};
14     uint32_t len = 0;
15     const char *szChinese = "qaz123获取汉字拼音";
16     get_first_letters(szChinese,buf,1024,len);
17     printf("%s\n",buf);
18     return 0;
19 }
20
21 void get_first_letters(const char *szChinese,char piyinBuf[],const uint32_t maxBufLen,uint32_t &piyinBufLen)
22 {
23     uint8_t chr[3];
24     piyinBufLen = 0;
25     uint32_t chineseLen = strlen(szChinese);
26     for (uint32_t i = 0; i < chineseLen && piyinBufLen < maxBufLen; ++i)
27     {
28         uint8_t c = szChinese[i];
29         // 排除askii 码
30         if (isascii(c))
31         {
32             piyinBuf[piyinBufLen++] = c;
33         }
34         else
35         {
36             chr[0] = szChinese[i];
37             chr[1] = szChinese[++i];
38             chr[2] = 0;
39             wchar_t wchr = 0;
40             wchr =  (chr[0]  &  0xff)  <<  8;
41             wchr |= (chr[1]  &  0xff);
42             piyinBuf[piyinBufLen++] = toupper(get_first_letter(wchr));
43         }
44     }
45 }
46
47 bool between(wchar_t start,wchar_t end,wchar_t aim)
48 {
49     if (start <= aim && aim <= end)
50     {
51         return true;
52     }
53     return false;
54 }
55
56 char get_first_letter(wchar_t wchar)
57 {
58     if  (between(0xB0A1,0xB0C4,wchar))  return  ‘a‘;
59     if  (between(0XB0C5,0XB2C0,wchar))  return  ‘b‘;
60     if  (between(0xB2C1,0xB4ED,wchar))  return  ‘c‘;
61     if  (between(0xB4EE,0xB6E9,wchar))  return  ‘d‘;
62     if  (between(0xB6EA,0xB7A1,wchar))  return  ‘e‘;
63     if  (between(0xB7A2,0xB8c0,wchar))  return  ‘f‘;
64     if  (between(0xB8C1,0xB9FD,wchar))  return  ‘g‘;
65     if  (between(0xB9FE,0xBBF6,wchar))  return  ‘h‘;
66     if  (between(0xBBF7,0xBFA5,wchar))  return  ‘j‘;
67     if  (between(0xBFA6,0xC0AB,wchar))  return  ‘k‘;
68     if  (between(0xC0AC,0xC2E7,wchar))  return  ‘l‘;
69     if  (between(0xC2E8,0xC4C2,wchar))  return  ‘m‘;
70     if  (between(0xC4C3,0xC5B5,wchar))  return  ‘n‘;
71     if  (between(0xC5B6,0xC5BD,wchar))  return  ‘o‘;
72     if  (between(0xC5BE,0xC6D9,wchar))  return  ‘p‘;
73     if  (between(0xC6DA,0xC8BA,wchar))  return  ‘q‘;
74     if  (between(0xC8BB,0xC8F5,wchar))  return  ‘r‘;
75     if  (between(0xC8F6,0xCBF0,wchar))  return  ‘s‘;
76     if  (between(0xCBFA,0xCDD9,wchar))  return  ‘t‘;
77     if  (between(0xCDDA,0xCEF3,wchar))  return  ‘w‘;
78     if  (between(0xCEF4,0xD188,wchar))  return  ‘x‘;
79     if  (between(0xD1B9,0xD4D0,wchar))  return  ‘y‘;
80     if  (between(0xD4D1,0xD7F9,wchar))  return  ‘z‘;
81     return  ‘\0‘;
82 }
时间: 2024-10-26 18:28:06

C/C++ 获取汉字拼音首字母的相关文章

C# 获取汉字拼音首字母

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

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获取汉字拼音首字母 --转载

在项目中要更能根据某些查询条件(比如姓名)的首字母作为条件进行查询,比如查一个叫"李晓明"的人,可以输入'lxm'.写了一个工具类如下: import java.io.UnsupportedEncodingException; /** * 取得给定汉字串的首字母串,即声母串 * Title: ChineseCharToEn * @date 2004-02-19 注:只支持GB2312字符集中的汉字 */ public final class ChineseCharToEn { priv

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

现实中我们经常看到这样的说明,排名不分先后,按姓名首字母进行排序.这是中国人大多数使用的排序方法.那么在php程序中该如何操作呢? 下面就分享一下在php程序中获取汉字拼音的首字母的方法,在网上搜到的大多数是有问题的,这个可是经过小编实践应用过的,真的可以使用的哦. //php获取中文字符拼音首字母 function getFirstCharter($str){  if(empty($str)){return '';}  $fchar=ord($str{0});  if($fchar>=ord(

如何获取汉字拼音首字母?一般用于通讯录

- (NSString *)firstCharactor:(NSString *)aString { //转成了可变字符串 NSMutableString *str = [NSMutableString stringWithString:aString]; //先转换为带声调的拼音 CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformMandarinLatin,NO); //再转换为不带声调的拼音 CFStringT

工作问题:如何获取汉字拼音首字母?一般用于通讯录建设

/* 程序员的目标是 征服星辰的大海~ */ - (NSString *)firstCharactor:(NSString *)aString { //转成了可变字符串 NSMutableString *str = [NSMutableString stringWithString:aString]; //先转换为带声调的拼音 CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformMandarinLatin,NO);

【JAVA】获取汉字拼音首字母

最近在做通讯录的时候,需要把姓转换为拼音字母 1-9 a-z A-Z 转换为#:借张微信的图大家感受下 网上的代码很多,不外乎两种 1:pinyin4java包太大 2:大部分不支持生僻字,比如“栾.鑫” 认不出 本方案解决了这个问题,就很简单一个helper类,注意,只是拼音首字母哦!且编码格式为GBK! 代码很简单,就是在正常GBK检索不到的生僻字上,再加入一个字典,如果GBK检索不到,则在字典里找. package zhexian.app.smartcall.Utils; import j

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

<?php header("content-type:text/html;charset=utf-8"); function getfirstchar($s0){ $firstchar_ord=ord(strtoupper($s0{0})); if (($firstchar_ord>=65 and $firstchar_ord<=91)or($firstchar_ord>=48 and $firstchar_ord<=57)) return $s0{0};

MySQL通过函数获取字符串汉字拼音首字母大写字符串

DELIMITER $$ DROP FUNCTION IF EXISTS `Fun_GetPY`$$ CREATE FUNCTION `HIS`.`Fun_GetPY` (in_string VARCHAR(21845)) RETURNS VARCHAR(21845) CHARSET utf8 BEGIN #截取字符串,每次做截取后的字符串存放在该变量中,初始为函数参数in_string值 DECLARE tmp_str VARCHAR(21845) CHARSET gbk DEFAULT ''