• 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
    ",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  '';
    82 }
  • 相关阅读:
    微服务下,使用ELK做日志收集及分析
    Spring boot下,集成任务调度中心(XXL-JOB)
    使用mysqldump 导出数据时的常用选项
    MySQL 批量insert 、单条insert
    分享一个 电子书下载网站 支持 ebook pdf azw3 epub mobi
    稀疏数组
    LaTeX 交叉引用系统简介
    服务器jupyter配置与ssh远程登录
    postgresql中终止正在执行的SQL语句
    Python 个人笔记(一)
  • 原文地址:https://www.cnblogs.com/tangxin-blog/p/5540622.html
Copyright © 2020-2023  润新知