如何实现按笔画排序??????(算法或思想)。。谢谢

kylekk 2003-03-12 02:50:23
在编程过程中遇到要姓名按笔画排序的问题,不知道如何下手。。谢谢
...全文
18 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
baobaowang 2003-04-26
mark
回复
arthor 2003-03-12
按笔画数排序,按笔画顺序排序。。。得自己订个排序规则亚
回复
孩皮妞野 2003-03-12
参: http://expert.csdn.net/Expert/topic/1013/1013377.xml?temp=.1266596
并整理如下:



// 略去需要包含的头文件
int _do_compare_chinese
(const char *const s1, const char * const s2, bool sort_stroke)
{

DWORD lc_id = sort_stroke ?
MAKELCID(MAKELANGID(LANG_CHINESE,
SUBLANG_CHINESE_SIMPLIFIED),
SORT_CHINESE_PRC) :
MAKELCID(MAKELANGID(LANG_CHINESE,
SUBLANG_CHINESE_SIMPLIFIED),
SORT_CHINESE_PRCP) ;
int i = CompareString(lc_id,0, s1, 2, s2, 2);
if(i==0) throw(std::runtime_error("error comparing Chinese characters"));
return i-2;
}

这个函数调用上面的workhorse, 对汉字按拼音进行比较
int compare_chinese_phonetic(const char *const s1,const char *const s2){
return _do_compare_chinese(s1,s2,false);
}

这个函数调用上面的workhorse, 对汉字按笔划进行比较
int compare_chinese_phonetic(const char *const s1,const char *const s2){
return _do_compare_chinese(s1,s2,true);
}

unsigned stroke_count(const char * const cc){
const static char ccs[] =
"一丁万不且礼丣並临丵乾亁亂僊僵亸償儭儳儶"
"儷亹儽儾囔圞灥囖爨厵灩麣蘒灪爩齾齉靐龘" ;
# define CCS_SIZE ( sizeof(ccs)-1 )
// 对序号大于31的,其笔划数要进行调整,这是调整数组
const static short adjust[]=
{-2, -7, -2, -2, -1, -1, 1, 9 };
unsigned i = 0;
for( ; i < CCS_SIZE; i += 2 )
if(compare_chinese_stroke(ccs+i,cc)>0) break;
i >>= 1; // divide i by 2
if(i == CCS_SIZE) return 0; // not a known Chinese Charater
if(i>31) i += adjust[i-32];
return i;
# undef CCS_SIZE
}
回复
孩皮妞野 2003-03-12
我做过一个,不过只能在Win32平台下使用[因为使用了Win32API].

对C++ Locale了解很深的大虾也许可以做出跨平台的解决。
回复
kicool 2003-03-12
gz
回复
发帖
工具平台和程序库
创建于2007-09-28

2.4w+

社区成员

C/C++ 工具平台和程序库
申请成为版主
帖子事件
创建了帖子
2003-03-12 02:50
社区公告
暂无公告