SAS中文论坛

标题: 排序,字母优先于大小写。 [打印本页]

作者: shiyiming    时间: 2009-3-30 14:50
标题: 排序,字母优先于大小写。
今天看到一个其他程序语言的一个面试题,发觉有一个题有点意思,可以用SAS写写。看各位会怎么处理这个问题。


对字符串进行排序,用任意一种编程语言来实现,不能使用现有的类,在排序中,字符串“Bc”,“Ad”,“aC”,“Hello”,“Xman”,“little”,“During”,“day”能够排序成 “Ad”,"aC",“Bc”,“During”,“day”,“Hello”,“little”,“Xman”,也就是说,在排序的过程并不是传统的按照字符串排序,在排序中还需要将小写字母一并排序,也就是说a字符串要在B或b之前。
作者: shiyiming    时间: 2009-3-30 15:43
标题: Re: 排序,字母优先于大小写。
如何排定“AD”,“ad”,“Ad”,“aD”?
用upcase不行吗?或者就用ASCII?因为A与a的ASCII的差值是恒定的。
抛砖罢了。
作者: shiyiming    时间: 2009-3-30 15:55
标题: Re: 排序,字母优先于大小写。
对字符串进行排序,用任意一种编程语言来实现,不能使用现有的类,在排序中,字符串“Bc”,“Ad”,“aC”,“Hello”,“Xman”,“little”,“During”,“day”能够排序成 [color=#FF0000:2dwj78h9]“Ad”,"aC",“[/color:2dwj78h9]Bc”,“During”,“day”,“Hello”,“little”,“Xman”,也就是说,在排序的过程并不是传统的按照字符串排序,在排序中还需要将小写字母一并排序,也就是说a字符串要在B或b之前。


从红色的两个词的顺序你就知道“AD”,“ad”,“Ad”,“aD”的顺序了。大写在前-------AD Ad aD ad.
作者: shiyiming    时间: 2009-3-30 21:48
标题: Re: 排序,字母优先于大小写。
like this?

data a;
input cc $;
cards;
ad
AD
Ad
aD
;
run;
proc sort data=work.a ascii;
by cc;
run;
作者: shiyiming    时间: 2009-3-31 10:54
标题: Re: 排序,字母优先于大小写。
好像得再加点东西:

data a;
input cc $;
upcc = upcase(cc);
cards;
ad
AD
Ad
aD
BB
Bb
bB
bb
;
run;

proc sort data=work.a out=work.a(drop=upcc) ascii;
by upcc cc;
run;

这里加了个upcase(cc)。不然的大写的字母在小写的前面了。
From the smallest to the largest character that you can display, the English-language ASCII sequence is

blank ! " # $ % & ' ( ) * + , - . /0 1 2 3 4 5 6 7 8 9 : ; < = > ? @
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z[ \] ˆ_
a b c d e f g h i j k l m n o p q r s t u v w x y z { } ~
作者: shiyiming    时间: 2009-3-31 11:18
标题: Re: 排序,字母优先于大小写。
仔细看了一下,楼上的两个的代码好象都还没有到位。。。。。。。。。

[code:3o2hj4xj]If the input is

abc

abC

aBC

ABC

Abc

ABc

aBc

AbC

aa







The output should be

                                            1     ABC

                                            2     ABc

                                            3     AbC

                                            4     Abc

                                            5     aa

                                            6     aBC

                                            7     aBc

                                            8     abC

                                            9     abc[/code:3o2hj4xj]
作者: shiyiming    时间: 2009-4-2 06:41
标题: Re: 排序,字母优先于大小写。
看起来象ASCII表到另一种顺序的一一映射,只不过版主的例子只给出了字母间的顺序,那些特殊字符怎么射呢?特别是介于Z和a之间的一些牛鬼蛇神。
作者: shiyiming    时间: 2009-4-2 10:52
标题: Re: 排序,字母优先于大小写。
福贵兄的各种问题解决方法多为激进的做法。
和兄台比起来,老朽的做法都偏于保守。我也现丑一下。
[code:37ma5ft7]data ahuige(drop=i);
  length ord $200 ;
  input str $;
  do i=1 to length(trim(str));
  ord=trim(ord)||upcase(substr(str,i,1))||substr(str,i,1);
  end;
  cards;
abc
abC
aBC
ABC
Abc
ABc
aBc
AbC
aa
  ;
run;

proc sort;
  by  ord;
run;[/code:37ma5ft7]




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2