zoukankan      html  css  js  c++  java
  • 得到常用汉字的拼音首字母

    这是网上的一段源码,能够将一个汉语字符串转换成拼音的首字母。

     1 #include   <iostream>   
     2 #include   <string>   
     3   using   namespace   std;   
     4     
     5   static   char   convert(wchar_t   n);   
     6   static   bool   In(wchar_t   start,   wchar_t   end,   wchar_t   code);   
     7     
     8   int   main(int   argc,   char*   argv[])   
     9   {   
    10   string   sChinese   =   "我爱中国";   //   输入的字符串   
    11     
    12   char   chr[3];   
    13   wchar_t   wchr   =   0;   
    14     
    15   char*   buff   =   new   char[sChinese.length()/2];   
    16   memset(buff,   0x00,   sizeof(char)*sChinese.length()/2+1);   
    17     
    18   for   (int   i   =   0,   j   =   0;   i   <   (sChinese.length()/2);   ++i)     
    19   {   
    20   memset(chr,   0x00,   sizeof(chr));   
    21   chr[0]   =   sChinese[j++];   
    22   chr[1]   =   sChinese[j++];   
    23   chr[2]   =   '/0';   
    24     
    25   //   单个字符的编码   如:'我'   =   0xced2   
    26   wchr   =   0;   
    27   wchr   =   (chr[0]   &   0xff)   <<   8;   
    28   wchr   |=   (chr[1]   &   0xff);   
    29     
    30   buff[i]   =   convert(wchr);   
    31   }   
    32     
    33   cout   <<   "pin   yin   =   ["   <<   buff   <<   "]"   <<   endl;   
    34   system("pause"); 
    35   return   0;   
    36   }   
    37     
    38   char   convert(wchar_t   n)   
    39   {   
    40   if   (In(0xB0A1,0xB0C4,n))   return   'a';   
    41   if   (In(0XB0C5,0XB2C0,n))   return   'b';   
    42   if   (In(0xB2C1,0xB4ED,n))   return   'c';   
    43   if   (In(0xB4EE,0xB6E9,n))   return   'd';   
    44   if   (In(0xB6EA,0xB7A1,n))   return   'e';   
    45   if   (In(0xB7A2,0xB8c0,n))   return   'f';   
    46   if   (In(0xB8C1,0xB9FD,n))   return   'g';   
    47   if   (In(0xB9FE,0xBBF6,n))   return   'h';   
    48   if   (In(0xBBF7,0xBFA5,n))   return   'j';   
    49   if   (In(0xBFA6,0xC0AB,n))   return   'k';   
    50   if   (In(0xC0AC,0xC2E7,n))   return   'l';   
    51   if   (In(0xC2E8,0xC4C2,n))   return   'm';   
    52   if   (In(0xC4C3,0xC5B5,n))   return   'n';   
    53   if   (In(0xC5B6,0xC5BD,n))   return   'o';   
    54   if   (In(0xC5BE,0xC6D9,n))   return   'p';   
    55   if   (In(0xC6DA,0xC8BA,n))   return   'q';   
    56   if   (In(0xC8BB,0xC8F5,n))   return   'r';   
    57   if   (In(0xC8F6,0xCBF0,n))   return   's';   
    58   if   (In(0xCBFA,0xCDD9,n))   return   't';   
    59   if   (In(0xCDDA,0xCEF3,n))   return   'w';   
    60   if   (In(0xCEF4,0xD188,n))   return   'x';   
    61   if   (In(0xD1B9,0xD4D0,n))   return   'y';   
    62   if   (In(0xD4D1,0xD7F9,n))   return   'z';   
    63   return   '/0';   
    64   }   
    65     
    66   bool   In(wchar_t   start,   wchar_t   end,   wchar_t   code)   
    67   {   
    68   if   (code   >=   start   &&   code   <=   end)     
    69   {   
    70   return   true;   
    71   }   
    72   return   false;   
    73   }   

    但是这种方法不能解决汉语和英语字符混合出现的情况,只需要加一个简单的判断即可。

    判断当前字符的ASCII码范围是否符合英语的标准。

    实现方法如下

    string CPasswordDlg::getShortName(string name)
      {
          string shortName;
          for(int j = 0; j < name.length(); j++)
            {
                char m = name[j];
                if(name[j] > 47 && name[j] < 123)
                {
                    shortName +=  name[j];
                }
                else
                {
                    char   chr[3];   
                    wchar_t   wchr   =   0;   
    
                    memset(chr,   0x00,   sizeof(chr));   
                    chr[0]   =   name[j++];   
                    chr[1]   =   name[j];   
                    chr[2]   =   '/0';   
    
                    
                    wchr   =   0;   
                    wchr   =   (chr[0]   &   0xff)   <<   8;   
                    wchr   |=   (chr[1]   &   0xff);   
    
                    shortName += convert(wchr);
    
                }
            }
          return shortName;
      }
     1 char   CPasswordDlg::convert(wchar_t   n)   
     2   {   
     3   if   (In(0xB0A1,0xB0C4,n))   return   'a';   
     4   if   (In(0XB0C5,0XB2C0,n))   return   'b';   
     5   if   (In(0xB2C1,0xB4ED,n))   return   'c';   
     6   if   (In(0xB4EE,0xB6E9,n))   return   'd';   
     7   if   (In(0xB6EA,0xB7A1,n))   return   'e';   
     8   if   (In(0xB7A2,0xB8c0,n))   return   'f';   
     9   if   (In(0xB8C1,0xB9FD,n))   return   'g';   
    10   if   (In(0xB9FE,0xBBF6,n))   return   'h';   
    11   if   (In(0xBBF7,0xBFA5,n))   return   'j';   
    12   if   (In(0xBFA6,0xC0AB,n))   return   'k';   
    13   if   (In(0xC0AC,0xC2E7,n))   return   'l';   
    14   if   (In(0xC2E8,0xC4C2,n))   return   'm';   
    15   if   (In(0xC4C3,0xC5B5,n))   return   'n';   
    16   if   (In(0xC5B6,0xC5BD,n))   return   'o';   
    17   if   (In(0xC5BE,0xC6D9,n))   return   'p';   
    18   if   (In(0xC6DA,0xC8BA,n))   return   'q';   
    19   if   (In(0xC8BB,0xC8F5,n))   return   'r';   
    20   if   (In(0xC8F6,0xCBF0,n))   return   's';   
    21   if   (In(0xCBFA,0xCDD9,n))   return   't';   
    22   if   (In(0xCDDA,0xCEF3,n))   return   'w';   
    23   if   (In(0xCEF4,0xD188,n))   return   'x';   
    24   if   (In(0xD1B9,0xD4D0,n))   return   'y';   
    25   if   (In(0xD4D1,0xD7F9,n))   return   'z';   
    26   return   '/0';   
    27   }   
    1   bool   CPasswordDlg::In(wchar_t   start,   wchar_t   end,   wchar_t   code)   
    2   {   
    3   if   (code   >=   start   &&   code   <=   end)     
    4   {   
    5   return   true;   
    6   }   
    7   return   false;   
    8   } 
  • 相关阅读:
    【CANoe基础】CANoe常用操作
    ZedGraph控件横纵坐标显示中文名(转)
    Winforn中设置ZedGraph曲线图的属性、坐标轴属性、刻度属性(转)
    c# 访问sqlite资源
    混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。
    ABP框架资源
    vue新建项目一直在downloading template转,最后超时
    vscode(实验)--ABP框架 .net core 版本的安装与运行(vue模板)(转)
    安装-打开-运行-ABP框架(asp.net core 2.X+Vue)运行前端(转)
    VSCode打开Visual Studio的ABP框架项目(转)
  • 原文地址:https://www.cnblogs.com/johnpher/p/2746898.html
Copyright © 2011-2022 走看看