怎么获得汉字字符串拼音首字母?? 怎么获得汉字字符串拼音首字母?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 晕,谁说要2000-3000,26个就够了,GB2312是拼音序的,比如,比b的第一个大的,比c的第一个小的,首字母肯定就是b阿 -_-b,非使用unicode的情况下,char str[]="汗!狂汗!瀑布汗!"unsigned short gb=*(unsigned short*)str;变量gb便是汗的GB2312码。如果使用了繁体字,考虑扩展GBK码,可能要再建一个表。 我这里有段代码,给你参考下#include "stdio.h"#include "string.h"#define TBYTE unsigned charvoid FirstLetter(int nCode, char& strRet);void GetFirstLetter(char* strName, char* strFirstLetter){ TBYTE ucHigh, ucLow; int nCode; char strRet; memset(strFirstLetter, 0, sizeof(strFirstLetter)); int i; int len = 0; for (i=0; i < (int)strlen(strName); i++) { if ((TBYTE)strName[i] < 0x80) continue; ucHigh = (TBYTE)strName[i]; ucLow = (TBYTE)strName[i+1]; if ( ucHigh < 0xa1 || ucLow < 0xa1) continue; else // Treat code by section-position as an int type parameter, // so make following change to nCode. nCode = (ucHigh - 0xa0) * 100 + ucLow - 0xa0; FirstLetter(nCode, strRet); strFirstLetter[len] = strRet; i++; len++; } strFirstLetter[len] = 0;}void FirstLetter(int nCode, char& strLetter){ if(nCode >= 1601 && nCode < 1637) strLetter = 'A'; if(nCode >= 1637 && nCode < 1833) strLetter = 'B'; if(nCode >= 1833 && nCode < 2078) strLetter = 'C'; if(nCode >= 2078 && nCode < 2274) strLetter = 'D'; if(nCode >= 2274 && nCode < 2302) strLetter = 'E'; if(nCode >= 2302 && nCode < 2433) strLetter = 'F'; if(nCode >= 2433 && nCode < 2594) strLetter = 'G'; if(nCode >= 2594 && nCode < 2787) strLetter = 'H'; if(nCode >= 2787 && nCode < 3106) strLetter = 'J'; if(nCode >= 3106 && nCode < 3212) strLetter = 'K'; if(nCode >= 3212 && nCode < 3472) strLetter = 'L'; if(nCode >= 3472 && nCode < 3635) strLetter = 'M'; if(nCode >= 3635 && nCode < 3722) strLetter = 'N'; if(nCode >= 3722 && nCode < 3730) strLetter = 'O'; if(nCode >= 3730 && nCode < 3858) strLetter = 'P'; if(nCode >= 3858 && nCode < 4027) strLetter = 'Q'; if(nCode >= 4027 && nCode < 4086) strLetter = 'R'; if(nCode >= 4086 && nCode < 4390) strLetter = 'S'; if(nCode >= 4390 && nCode < 4558) strLetter = 'T'; if(nCode >= 4558 && nCode < 4684) strLetter = 'W'; if(nCode >= 4684 && nCode < 4925) strLetter = 'X'; if(nCode >= 4925 && nCode < 5249) strLetter = 'Y'; if(nCode >= 5249 && nCode < 5590) strLetter = 'Z';}void main(){ char strName[10], strRes[5]; strcpy(strName, "汗!瀑布汗!"); memset(strRes, 0, sizeof(strRes)); GetFirstLetter(strName, strRes); printf("%s\n", strRes);} haha 汗!瀑布汗!" 出来的结果是HHPBHH 不过还是没有搞懂为什么这么多汉字,就这几个ncode都包含了!!呵呵 ftp服务器接收到的命令有乱码问题 如何使vc 的listbox控件中的字体居中 详细介绍下文件打包吧 请指点迷津:关于windows设备管理原理? 如何在网络断开的情况下判断,等网络恢复后再自动连接??? 谁来翻译一下? 如何使VC程序支持双显卡 请问统计如何做? 有关USB接口的API函数问题 有关组合框的一个问题 如何令CComboBox不自动选择第一个匹配项........ 谢谢大家了!图形处理弱智问题.我想了很多办法,都不太好。
char str[]="汗!狂汗!瀑布汗!"
unsigned short gb=*(unsigned short*)str;
变量gb便是汗的GB2312码。如果使用了繁体字,考虑扩展GBK码,可能要再建一个表。
#include "stdio.h"
#include "string.h"
#define TBYTE unsigned charvoid FirstLetter(int nCode, char& strRet);
void GetFirstLetter(char* strName, char* strFirstLetter)
{
TBYTE ucHigh, ucLow;
int nCode;
char strRet;
memset(strFirstLetter, 0, sizeof(strFirstLetter));
int i;
int len = 0;
for (i=0; i < (int)strlen(strName); i++)
{
if ((TBYTE)strName[i] < 0x80)
continue; ucHigh = (TBYTE)strName[i];
ucLow = (TBYTE)strName[i+1];
if ( ucHigh < 0xa1 || ucLow < 0xa1)
continue;
else
// Treat code by section-position as an int type parameter,
// so make following change to nCode.
nCode = (ucHigh - 0xa0) * 100 + ucLow - 0xa0; FirstLetter(nCode, strRet);
strFirstLetter[len] = strRet;
i++;
len++;
}
strFirstLetter[len] = 0;
}void FirstLetter(int nCode, char& strLetter)
{
if(nCode >= 1601 && nCode < 1637) strLetter = 'A';
if(nCode >= 1637 && nCode < 1833) strLetter = 'B';
if(nCode >= 1833 && nCode < 2078) strLetter = 'C';
if(nCode >= 2078 && nCode < 2274) strLetter = 'D';
if(nCode >= 2274 && nCode < 2302) strLetter = 'E';
if(nCode >= 2302 && nCode < 2433) strLetter = 'F';
if(nCode >= 2433 && nCode < 2594) strLetter = 'G';
if(nCode >= 2594 && nCode < 2787) strLetter = 'H';
if(nCode >= 2787 && nCode < 3106) strLetter = 'J';
if(nCode >= 3106 && nCode < 3212) strLetter = 'K';
if(nCode >= 3212 && nCode < 3472) strLetter = 'L';
if(nCode >= 3472 && nCode < 3635) strLetter = 'M';
if(nCode >= 3635 && nCode < 3722) strLetter = 'N';
if(nCode >= 3722 && nCode < 3730) strLetter = 'O';
if(nCode >= 3730 && nCode < 3858) strLetter = 'P';
if(nCode >= 3858 && nCode < 4027) strLetter = 'Q';
if(nCode >= 4027 && nCode < 4086) strLetter = 'R';
if(nCode >= 4086 && nCode < 4390) strLetter = 'S';
if(nCode >= 4390 && nCode < 4558) strLetter = 'T';
if(nCode >= 4558 && nCode < 4684) strLetter = 'W';
if(nCode >= 4684 && nCode < 4925) strLetter = 'X';
if(nCode >= 4925 && nCode < 5249) strLetter = 'Y';
if(nCode >= 5249 && nCode < 5590) strLetter = 'Z';
}void main()
{
char strName[10], strRes[5];
strcpy(strName, "汗!瀑布汗!");
memset(strRes, 0, sizeof(strRes));
GetFirstLetter(strName, strRes);
printf("%s\n", strRes);
}