按拼音或者笔画排序你的字符串
来源:互联网 发布:徽商银行待遇知乎 编辑:程序博客网 时间:2024/04/28 04:18
很多人会很好奇,怎么数据库能够根据拼音排序的?网上能搜到很多网友自己写的处理按拼音排序的模块。
GB2312的一级汉字确实是按拼音排列的,我们可以简单的比较它们的编码,但是二级汉字呢?如果你的程序是使用Unicode字符串的呢?
不用担心,Windows I18N API已经给我们提供了相关的函数来实现这一切,你所需要做的就是传入一个合适的参数。
下面的函数会将GBK中所有的汉字按拼音或者笔画序输出到控制台,非常简单,对吗?
#include <windows.h>
#include <algorithm>
#include <cstdio>
char Buf[65536][3];
char *BufT[65536];
bool Comp(const char *str1,const char *str2)
{
//SORT_CHINESE_PRCP 拼音
//SORT_CHINESE_PRC 笔画
int t=::CompareString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRCP),0,str1,-1,str2,-1);
return t<2;
}
int main()
{
//生成GBK码表
int n=0;
for (int i=0x81;i<=0xFE;++i)
{
for (int j=0x40;j<=0x7E;++j) {
Buf[n][0]=(char)i;
Buf[n][1]=(char)j;
++n;
}
for (int j=0x80;j<=0xFE;++j) {
Buf[n][0]=(char)i;
Buf[n][1]=(char)j;
++n;
}
}
for (int i=0;i<n;++i) BufT[i]=&Buf[i][0];
std::sort(&BufT[0],&BufT[n],Comp);
for (int i=0;i<n;++i) printf("%s",BufT[i]);
}
附上一篇非常详尽的描述Windows I18N API的文章:
http://www.woodenhead.org/microsoft/International%20Programming%20for%20Microsoft%20Windows/9.htm
GB2312的一级汉字确实是按拼音排列的,我们可以简单的比较它们的编码,但是二级汉字呢?如果你的程序是使用Unicode字符串的呢?
不用担心,Windows I18N API已经给我们提供了相关的函数来实现这一切,你所需要做的就是传入一个合适的参数。
下面的函数会将GBK中所有的汉字按拼音或者笔画序输出到控制台,非常简单,对吗?
#include <windows.h>
#include <algorithm>
#include <cstdio>
char Buf[65536][3];
char *BufT[65536];
bool Comp(const char *str1,const char *str2)
{
//SORT_CHINESE_PRCP 拼音
//SORT_CHINESE_PRC 笔画
int t=::CompareString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRCP),0,str1,-1,str2,-1);
return t<2;
}
int main()
{
//生成GBK码表
int n=0;
for (int i=0x81;i<=0xFE;++i)
{
for (int j=0x40;j<=0x7E;++j) {
Buf[n][0]=(char)i;
Buf[n][1]=(char)j;
++n;
}
for (int j=0x80;j<=0xFE;++j) {
Buf[n][0]=(char)i;
Buf[n][1]=(char)j;
++n;
}
}
for (int i=0;i<n;++i) BufT[i]=&Buf[i][0];
std::sort(&BufT[0],&BufT[n],Comp);
for (int i=0;i<n;++i) printf("%s",BufT[i]);
}
附上一篇非常详尽的描述Windows I18N API的文章:
http://www.woodenhead.org/microsoft/International%20Programming%20for%20Microsoft%20Windows/9.htm
- 按拼音或者笔画排序你的字符串
- sql中如何按拼音笔画排序
- sql 按姓氏笔画(拼音)排序
- nlssort NLS_SORT 按笔画,拼音,部首排序
- C#对字符串进行排序 支持中文 笔画和拼音
- NLS_SORT 按拼音排序 按笔画排序 按部首排序
- SQL2005 实现按拼音排序与笔画排序
- SQL 用中文的拼音和笔画排序
- Oracle中sql,汉字按拼音、笔画、偏旁排序方法
- oracle中排序--拼音、笔画、偏旁部首
- ORACLE按照拼音,部首,笔画排序
- ORACLE按照拼音,部首,笔画排序
- ORACLE按照拼音,部首,笔画排序
- ORACLE按照拼音,部首,笔画排序
- oracle按照拼音、部首、笔画排序
- ORACLE按照拼音,部首,笔画排序
- ORACLE按照拼音,部首,笔画排序
- ORACLE按照拼音,部首,笔画排序
- ASP.Net性能优化——页面数据缓存
- [英语阅读]不受欢迎的夜半歌声:打鼾
- CommunityServer系列之十一:优秀的URL重写机制
- 裁员后的一封offer(一)
- MyEclipse 开发 SSH 整合时 java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit 解决方案
- 按拼音或者笔画排序你的字符串
- [英语阅读]男人其实也“脆弱”
- vs2005 adrotator 数据库邦定,以及动态添加adrotator
- 快速找到数据库致慢的原因
- 一场虚惊
- 最流行的英文简历模板
- 正则表达式(学习)
- 导入EXCEL到数据库并删除EXCEL文件(死亡历险)
- 程序员怎样学数学:半路出家也能让编程是小菜一碟