Jiang's C++ Space

创作,也是一种学习的过程。

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
为了实现中文拼音序,就必须能够用拼音来比较汉字大小,默认情况下,Windows Mobile下的字符都是UNICODE,UNICODE明显并不是拼音序,所以不能直接用_tcscmp之类的函数,我记得Windows环境下可用strcoll实现,但当我在Windows Mobile环境下尝试使用strcoll时,却发现strcoll并没有被实现,郁闷。查了很多资料之后,发觉GBK码是拼音序的,OK,就用这个权宜之计吧:
#define  MAX_WCHAR_LENGTH   64
#define  MAX_CHAR_BUFF_LEN  (MAX_WCHAR_LENGTH*2)

INT StrCmpPinyin(
const WCHAR* str1, const WCHAR* str2)
{
    WCHAR szWStr1[MAX_WCHAR_LENGTH];
    WCHAR szWStr2[MAX_WCHAR_LENGTH];
    CHAR szStr1[MAX_CHAR_BUFF_LEN];
    CHAR szStr2[MAX_CHAR_BUFF_LEN];
    
    StringCchCopyW(szWStr1, MAX_WCHAR_LENGTH, str1);
    StringCchCopyW(szWStr2, MAX_WCHAR_LENGTH, str2);

    WideCharToMultiByte(CP_ACP, 
0, szWStr1, -1, szStr1, MAX_CHAR_BUFF_LEN, NULL, NULL);
    WideCharToMultiByte(CP_ACP, 
0, szWStr2, -1, szStr2, MAX_CHAR_BUFF_LEN, NULL, NULL);

    
return _stricmp(szStr1, szStr2);
}
测试了一下,效率还行……
posted on 2011-02-12 17:05 Jiang Guogang 阅读(579) 评论(3)  编辑 收藏 引用 所属分类: Windows Embedded Programming

评论

# re: Windows Mobile中文拼音序 2011-03-02 22:08 gejun
。。。,让人头痛的细节  回复  更多评论
  

# re: Windows Mobile中文拼音序 2011-07-28 22:43 Matrix Chen
楼主这样解决不完善啊。

GBK是GB2312的扩展。即使GB2312,也包括2部分。第一部分3000多个最常用字是拼音排序的,但是接下的3000多个次常用字是部首(or笔画)排序的。

事实上第二部分有不少字也是很常用的。

参考 http://ash.jp/code/cn/gb2312tbl.htm。 D8A0之后的部分就是笔画排序的  回复  更多评论
  

# re: Windows Mobile中文拼音序 2011-08-01 20:50 博主
@Matrix Chen
嗯,你说的没错,其实我也知道这个问题的存在,只是后来我的解决方法相当繁琐,你有什么好的方法吗?另外,你的博客怎么一点东西都没有,呵呵,没法跟你联系啊……
:D  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理