输入有限个字符串,先按字符串长度排序,若长度一样,再按字母顺序排序,并将其输出

2025-04-14 14:11:26
推荐回答(1个)
回答1:

设允许输入10个字符串,长度限制为50个字符以内,用char型二维数组记载。另声明一个10个元素的char *型指针数组,使每个元素对应指向前述每个字符串,排序时只交换指针而不拷贝字符串。代码如下:

#include "stdio.h"
#include "string.h"
int main(int argc,char *argv[]){
char s[10][51],*ps[10]={s[0],s[1],s[2],s[3],s[4],s[5],s[6],s[7],s[8],s[9]},*p;
int i,j,k,t;
printf("Input 10 strings...\n");
for(i=0;i<10;scanf("%50s",s[i++]));//输入10个字符串
for(i=0;i<10;i++){//选择排序
for(k=i,j=k+1;j<10;j++)
//下一句按长度或等长时大小判断
if((t=strlen(ps[k])-strlen(ps[j]))>0 || (t==0 && strcmp(ps[k],ps[j])>0))
k=j;
if(k-i)
p=ps[k],ps[k]=ps[i],ps[i]=p;//只交换指针
printf("%s\n",ps[i]);//输出
}
return 0;
}

运行样例如下: