不断地要求使用者输入一组资料(皆属于同一种资料型态,如整数、浮点数或字串(不超过20字元)),直到此组资料符合离开条件时则程式结束。每次输入的一组资料内容如下所示:
N d1 d2 … dN
N代表接下来输入的资料数量
d1 d2 … dN 表示各个资料值(同一种资料型态,可为整数、浮点数或字串)
在此注意的是当N<=0时,则代表此资料符合离开程式条件
当一组资料被输入且不符合离开条件时,请将资料由小到大排序输出。
字串资料之大小比较,请根据字串中各个位置的英文字母在ASCII Table中出现顺序来做为优先顺序,英文字母越前面者优先权越高。
输入资料:
5 5 3 4 2 1
5 1.1 3.3 2.2 4.4 5.5
3 to too tomorrow
0
输出结果:
1 2 3 4 5
1.1 2.2 3.3 4.4 5.5
to tomorrow too
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXN 1000
char s[MAXN][21];
char s1[21];
char t;
int N,i,j,v,n;
double d;
int main() {
while (1) {
scanf("%d",&N);
if (N<=0) break;
for (i=0;i<N;i++) {
scanf("%20s",s[i]);
}
for (i=0;i<N;i++) {
if (1==sscanf(s[i],"%d%n",&v,&n)) {
if (s[i][n]!=0) break;
}
}
if (i>=N) t='i';
else {
for (i=0;i<N;i++) {
if (1==sscanf(s[i],"%lf%n",&d,&n)) {
if (s[i][n]!=0) break;
}
}
if (i>=N) t='f';
else t='s';
}
for (i=0;i<N-1;i++)
for (j=i+1;j<N;j++) {
switch (t) {
case 'i':
if (atoi(s[i])>atoi(s[j])) {
strcpy(s1,s[i]);
strcpy(s[i],s[j]);
strcpy(s[j],s1);
}
break;
case 'f':
if (atof(s[i])>atof(s[j])) {
strcpy(s1,s[i]);
strcpy(s[i],s[j]);
strcpy(s[j],s1);
}
break;
case 's':
if (strcmp(s[i],s[j])>0) {
strcpy(s1,s[i]);
strcpy(s[i],s[j]);
strcpy(s[j],s1);
}
break;
}
}
for (i=0;i<N;i++) {
if (i==0) printf( "%s",s[i]);
else printf(" %s",s[i]);
}
printf("\n");
}
return 0;
}