存档

2010年7月 的存档

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

七月 14th, {2010 6 条评论 13,321 人阅读过  

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

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

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <glib.h>
 
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;
 
}

程序输出:linuxSYGCSDCZXT

分类: C/C++ 标签:

近期生活小记

七月 2nd, {2010 18 条评论 8,375 人阅读过  

貌似有一段时间没更新了,最近忙着复习万恶的期末考试,虽然只有两三门需要考的,也足以让我焦头烂额了,一次课都没上过,与其是复习,还不如是重新学习呢,没想到读研了还得受这罪。

其实想想考试也挺好的,起码还有个理由可以不用去管实验室里那些乱七八糟的事,每天还可以抽出点时间看看动漫,除了担心那一两门课之外生活也挺滋润,只不过完全没有心思去顾及其它的事情,论坛上还有blog上飞信用户提出的那些新需求都没有时间去修改,希望看到这篇文章的兄弟姐妹们能海涵,另外那个小飞信我也完全开源了,这样也方便大家自己去修改去添加自己需要的功能,啊,开源真好。

实验室前几天开了个会弄得我头痛,项目快要中期检查了,界面我还没有做,其实挺想做界面的,力气活,不用花太多心思,反正上班时间也是要干活,与其去写那些又无聊又费脑子的程序,不如做界面来得舒服,就那样机械的写就行,有活干就表示自己没闲着,事情也总不会老按我想的来,界面还是会安排其它人来做,这样可以充分地利用人力资源,我也只有悲苦地去实现那些“神奇”的功能了。

开会的时候提到要买开发设备,为了给砖家们演示,需要做得炫一点,于是大家想到用手机来做演示终端,于是又想到要买手机,可各种因素导致了只能买一款基于Android的手机,据我所知目前比较完善的Android接口还是基于java的吧,C的貌似有一点,而且想要把我的纯C的程序移植过去那几乎是不可能的,用java的话那就等于要重写一遍,而且用java总让人觉得很搞笑,底层网络的程序用java来实现,那性能怎么能保证呢,一直想不明白,各大手机操作系统为什么对java支持地这么广泛,手机的硬件水准比PC机本来就不是一个档次,还用java这种低效的高级语言,怎么能保证效率呢。我开始用C/C++之后就不再想碰java和C#这样的语言了,效率真的不是一个档次的,虽然我C/C++用得也不好…

哎,悲剧的研究生生活…

分类: My Life 标签: