#include <stdint.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h> bool between(uint32_t start,uint32_t end,uint32_t aim);
char get_first_letter(wchar_t wchar);
void get_first_letters(const char *szChinese,char piyinBuf[],const uint32_t maxBufLen,uint32_t &piyinBufLen); int32_t main()
{
char buf[] = {};
uint32_t len = ;
const char *szChinese = "qaz123获取汉字拼音";
get_first_letters(szChinese,buf,,len);
printf("%s\n",buf);
return ;
} void get_first_letters(const char *szChinese,char piyinBuf[],const uint32_t maxBufLen,uint32_t &piyinBufLen)
{
uint8_t chr[];
piyinBufLen = ;
uint32_t chineseLen = strlen(szChinese);
for (uint32_t i = ; i < chineseLen && piyinBufLen < maxBufLen; ++i)
{
uint8_t c = szChinese[i];
// 排除askii 码
if (isascii(c))
{
piyinBuf[piyinBufLen++] = c;
}
else
{
chr[] = szChinese[i];
chr[] = szChinese[++i];
chr[] = ;
wchar_t wchr = ;
wchr = (chr[] & 0xff) << ;
wchr |= (chr[] & 0xff);
piyinBuf[piyinBufLen++] = toupper(get_first_letter(wchr));
}
}
} bool between(wchar_t start,wchar_t end,wchar_t aim)
{
if (start <= aim && aim <= end)
{
return true;
}
return false;
} char get_first_letter(wchar_t wchar)
{
if (between(0xB0A1,0xB0C4,wchar)) return 'a';
if (between(0XB0C5,0XB2C0,wchar)) return 'b';
if (between(0xB2C1,0xB4ED,wchar)) return 'c';
if (between(0xB4EE,0xB6E9,wchar)) return 'd';
if (between(0xB6EA,0xB7A1,wchar)) return 'e';
if (between(0xB7A2,0xB8c0,wchar)) return 'f';
if (between(0xB8C1,0xB9FD,wchar)) return 'g';
if (between(0xB9FE,0xBBF6,wchar)) return 'h';
if (between(0xBBF7,0xBFA5,wchar)) return 'j';
if (between(0xBFA6,0xC0AB,wchar)) return 'k';
if (between(0xC0AC,0xC2E7,wchar)) return 'l';
if (between(0xC2E8,0xC4C2,wchar)) return 'm';
if (between(0xC4C3,0xC5B5,wchar)) return 'n';
if (between(0xC5B6,0xC5BD,wchar)) return 'o';
if (between(0xC5BE,0xC6D9,wchar)) return 'p';
if (between(0xC6DA,0xC8BA,wchar)) return 'q';
if (between(0xC8BB,0xC8F5,wchar)) return 'r';
if (between(0xC8F6,0xCBF0,wchar)) return 's';
if (between(0xCBFA,0xCDD9,wchar)) return 't';
if (between(0xCDDA,0xCEF3,wchar)) return 'w';
if (between(0xCEF4,0xD188,wchar)) return 'x';
if (between(0xD1B9,0xD4D0,wchar)) return 'y';
if (between(0xD4D1,0xD7F9,wchar)) return 'z';
return '\0';
}

最新文章

  1. Fibers in JVM
  2. 修改tomcat应用日志默认编码格式
  3. Iterator(迭代器)-对象行为型模式
  4. 《JavaScript高级程序设计》学习笔记
  5. [收藏]Asp.net MVC生命周期
  6. java中枚举类的使用详解
  7. Google Map API 代码示例
  8. RequireJS学习资料
  9. CDbConnection failed to open the DB connection: SQLSTATE[28000] [1045] Access denied for user &#39;root&#39;@&#39;localhost&#39; (using password: YES)
  10. android PM2.5监控demo开发
  11. Docker动态给容器Container暴露端口
  12. 【转】第8章 前摄器(Proactor):用于为异步事件多路分离和分派处理器的对象行为模式
  13. 七、eclipse添加离线约束,使不联网也能有一些代码的提示,例如dubbo
  14. MySQl创建用户和授权
  15. 【Python】多线程-2
  16. Spring的下载与安装
  17. 详解C#泛型(二)
  18. Grid中添加链接,打开选项卡页面
  19. 20172321『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结
  20. Node.js创建第一个应用

热门文章

  1. LightOJ1422 Halloween Costumes(区间DP)
  2. C++做client Java做客户端传送数据
  3. 使用HttpsURLConnection发送POST请求
  4. TC SRM 584 DIV 2
  5. SpringMVC_The resource identified by this request is only capable of generating responses with characteristics
  6. 转 sql 时间转换格式 convert(varchar(10),字段名,转换格式)
  7. smarty模板中literal标签的使用
  8. PHP中有关Session的函数比较多,最常用到的也就这么几个函数
  9. HTML&amp;CSS----练习做网页
  10. Shrink磁盘