c语言 获取中文首字母,C语言获取汉字拼音首字母

C语言获取汉字拼音首字母

2010年7月14日 | 分类: C/C++ | 标签: C/C++

多网友提意见让我给小飞信加上好友搜索功能,这几天太忙,抽时间把其它的功能加了一下,现在就剩下这个功能没做好了,想做成按汉字首字母搜索的那种,于是查了查资料写了个把汉字转换成首字母的程序,贴一下有需要的可以拿去用,也顺便给自己做个备份。

下面是程序,用了glib里面的一个函数g_convert,用iconv也可以,g_convert更方便一些就直接拿来用了。

#include

#include

#include

#include

gchar getpychar(guchar uword0 , guchar uword1)

{

gchar pychar;

int i1 = (short)(uword0 - '/0');

int i2 = (short)(uword1 - '/0');

int tmp = i1 * 256 + i2;

if(tmp >= 45217 && tmp <= 45252) pychar = 'A';

else if(tmp >= 45253 && tmp <= 45760) pychar = 'B';

else if(tmp >= 45761 && tmp <= 46317) pychar = 'C';

else if(tmp >= 46318 && tmp <= 46825) pychar = 'D';

else if(tmp >= 46826 && tmp <= 47009) pychar = 'E';

else if(tmp >= 47010 && tmp <= 47296) pychar = 'F';

else if(tmp >= 47297 && tmp <= 47613) pychar = 'G';

else if(tmp >= 47614 && tmp <= 48118) pychar = 'H';

else if(tmp >= 48119 && tmp <= 49061) pychar = 'J';

else if(tmp >= 49062 && tmp <= 49323) pychar = 'K';

else if(tmp >= 49324 && tmp <= 49895) pychar = 'L';

else if(tmp >= 49896 && tmp <= 50370) pychar = 'M';

else if(tmp >= 50371 && tmp <= 50613) pychar = 'N';

else if(tmp >= 50614 && tmp <= 50621) pychar = 'O';

else if(tmp >= 50622 && tmp <= 50905) pychar = 'P';

else if(tmp >= 50906 && tmp <= 51386) pychar = 'Q';

else if(tmp >= 51387 && tmp <= 51445) pychar = 'R';

else if(tmp >= 51446 && tmp <= 52217) pychar = 'S';

else if(tmp >= 52218 && tmp <= 52697) pychar = 'T';

else if(tmp >= 52698 && tmp <= 52979) pychar = 'W';

else if(tmp >= 52980 && tmp <= 53640) pychar = 'X';

else if(tmp >= 53689 && tmp <= 54480) pychar = 'Y';

else if(tmp >= 54481 && tmp <= 55289) pychar = 'Z';

else pychar = ' ';

return pychar;

}

gchar *getpystring(const gchar *in)

{

gsize inlen , olen , i , j = 0;

gchar *gword = g_convert(in , strlen(in)

, "gb2312" , "utf8" , &inlen , &olen , NULL);

guchar *uword = (guchar*)gword;

gchar *out = (gchar*)malloc(olen);

memset(out , 0 , olen);

for(i = 0 ; i < olen ; i++){

if(uword[i] >= 0xa1){

if(uword[i] != 0xa3){

out[j++] = getpychar(uword[i] , uword[i + 1]);

i ++;

}

}else{

out[j++] = (gchar)uword[i];

}

}

return out;

}

int main(int argc , char **argv)

{

printf("%s/n" , getpystring("linux是一个出色的操作系统"));

return 0;

}

C语言获取汉字拼音首字母

2010年7月14日 | 分类: C/C++ | 标签: C/C++

多网友提意见让我给小飞信加上好友搜索功能,这几天太忙,抽时间把其它的功能加了一下,现在就剩下这个功能没做好了,想做成按汉字首字母搜索的那种,于是查了查资料写了个把汉字转换成首字母的程序,贴一下有需要的可以拿去用,也顺便给自己做个备份。

下面是程序,用了glib里面的一个函数g_convert,用iconv也可以,g_convert更方便一些就直接拿来用了。

#include

#include

#include

#include

gchar getpychar(guchar uword0 , guchar uword1)

{

gchar pychar;

int i1 = (short)(uword0 - '/0');

int i2 = (short)(uword1 - '/0');

int tmp = i1 * 256 + i2;

if(tmp >= 45217 && tmp <= 45252) pychar = 'A';

else if(tmp >= 45253 && tmp <= 45760) pychar = 'B';

else if(tmp >= 45761 && tmp <= 46317) pychar = 'C';

else if(tmp >= 46318 && tmp <= 46825) pychar = 'D';

else if(tmp >= 46826 && tmp <= 47009) pychar = 'E';

else if(tmp >= 47010 && tmp <= 47296) pychar = 'F';

else if(tmp >= 47297 && tmp <= 47613) pychar = 'G';

else if(tmp >= 47614 && tmp <= 48118) pychar = 'H';

else if(tmp >= 48119 && tmp <= 49061) pychar = 'J';

else if(tmp >= 49062 && tmp <= 49323) pychar = 'K';

else if(tmp >= 49324 && tmp <= 49895) pychar = 'L';

else if(tmp >= 49896 && tmp <= 50370) pychar = 'M';

else if(tmp >= 50371 && tmp <= 50613) pychar = 'N';

else if(tmp >= 50614 && tmp <= 50621) pychar = 'O';

else if(tmp >= 50622 && tmp <= 50905) pychar = 'P';

else if(tmp >= 50906 && tmp <= 51386) pychar = 'Q';

else if(tmp >= 51387 && tmp <= 51445) pychar = 'R';

else if(tmp >= 51446 && tmp <= 52217) pychar = 'S';

else if(tmp >= 52218 && tmp <= 52697) pychar = 'T';

else if(tmp >= 52698 && tmp <= 52979) pychar = 'W';

else if(tmp >= 52980 && tmp <= 53640) pychar = 'X';

else if(tmp >= 53689 && tmp <= 54480) pychar = 'Y';

else if(tmp >= 54481 && tmp <= 55289) pychar = 'Z';

else pychar = ' ';

return pychar;

}

gchar *getpystring(const gchar *in)

{

gsize inlen , olen , i , j = 0;

gchar *gword = g_convert(in , strlen(in)

, "gb2312" , "utf8" , &inlen , &olen , NULL);

guchar *uword = (guchar*)gword;

gchar *out = (gchar*)malloc(olen);

memset(out , 0 , olen);

for(i = 0 ; i < olen ; i++){

if(uword[i] >= 0xa1){

if(uword[i] != 0xa3){

out[j++] = getpychar(uword[i] , uword[i + 1]);

i ++;

}

}else{

out[j++] = (gchar)uword[i];

}

}

return out;

}

int main(int argc , char **argv)

{

printf("%s/n" , getpystring("linux是一个出色的操作系统"));

return 0;

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值