SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1403|回复: 7
打印 上一主题 下一主题

排序,字母优先于大小写。

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2009-3-30 14:50:03 | 只看该作者

排序,字母优先于大小写。

今天看到一个其他程序语言的一个面试题,发觉有一个题有点意思,可以用SAS写写。看各位会怎么处理这个问题。


对字符串进行排序,用任意一种编程语言来实现,不能使用现有的类,在排序中,字符串“Bc”,“Ad”,“aC”,“Hello”,“Xman”,“little”,“During”,“day”能够排序成 “Ad”,"aC",“Bc”,“During”,“day”,“Hello”,“little”,“Xman”,也就是说,在排序的过程并不是传统的按照字符串排序,在排序中还需要将小写字母一并排序,也就是说a字符串要在B或b之前。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2009-3-30 15:43:42 | 只看该作者

Re: 排序,字母优先于大小写。

如何排定“AD”,“ad”,“Ad”,“aD”?
用upcase不行吗?或者就用ASCII?因为A与a的ASCII的差值是恒定的。
抛砖罢了。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2009-3-30 15:55:39 | 只看该作者

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.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2009-3-30 21:48:41 | 只看该作者

Re: 排序,字母优先于大小写。

like this?

data a;
input cc $;
cards;
ad
AD
Ad
aD
;
run;
proc sort data=work.a ascii;
by cc;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2009-3-31 10:54:29 | 只看该作者

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 { } ~
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2009-3-31 11:18:56 | 只看该作者

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]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2009-4-2 06:41:03 | 只看该作者

Re: 排序,字母优先于大小写。

看起来象ASCII表到另一种顺序的一一映射,只不过版主的例子只给出了字母间的顺序,那些特殊字符怎么射呢?特别是介于Z和a之间的一些牛鬼蛇神。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2009-4-2 10:52:29 | 只看该作者

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]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-5 12:20 , Processed in 0.083950 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表