您的位置:程序门 -> delphi -> windows sdk/api



关于字符串列表排序的困惑!


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


关于字符串列表排序的困惑!
发表于:2008-01-05 11:04:25 楼主
stringlist的排序是按照单字节还是按照双字节排的?
比如两个字符串:
'ab   '和'ab'一个后边是空格,一个后边是,十六进制分别为20和01。
排序的结果为:
ab
ab   (后有空格)

'ab   '和'aba',十六进制分别为61   62   20和61   62   01   61
排序的结果为:
ab   (后有空格)
aba

谁解释一下原因?在excel中也是如此。
发表于:2008-01-05 11:23:511楼 得分:0
和位数有关系的

就你上面那个,有3位的先从3位排序,完来才开始4位
你换成数字试验一下,就明白了
发表于:2008-01-05 11:28:042楼 得分:0
不对,我搞错了,哈哈  
发表于:2008-01-05 11:30:403楼 得分:0
没关系,谢谢参与!
发表于:2008-01-05 11:35:134楼 得分:0
我也不明白,帮你顶一下
发表于:2008-01-05 14:18:005楼 得分:0
按我的理解:'ab'   'ab   '   'ab   '三个串排序的的顺序应该为:
'ab'
'ab   '
'ab   '
但实际上是:
'ab'
'ab   '
'ab   '

的十六进制ansi编码为01,最小的。
哪位高手解释一下?

顺便说一下,我想找一个可以排到空格之前的字符,发现只要能够显示出来的,都会排到空格之后(前提是前后都有字符,前面的相同,如果单排这两个字符,就会按ansi编码排列),才发现这个现象,不能明白。
发表于:2008-01-05 14:24:246楼 得分:0
可能是它的排序算法有问题.
发表于:2008-01-05 14:58:347楼 得分:0
跟踪到后台,
比较函数是采用的winnt的函数comparestringa
function   comparestring;   external   kernel32   name   'comparestringa';

于是,要怪就怪微软吧。。。。
发表于:2008-01-05 14:59:368楼 得分:0
调用
ansicomparetext('ab   c','ab'#$01'c')
返回-1

ansicomparetext的实现:
function   ansicomparetext(const   s1,   s2:   string):   integer;
begin
    result   :=   comparestring(locale_user_default,   norm_ignorecase,   pchar(s1),
        length(s1),   pchar(s2),   length(s2))   -   2;
end;
发表于:2008-01-05 17:09:229楼 得分:0
谢谢大家,我再琢磨一下!


快速检索

最新资讯
热门点击