解题思路:用一个字符型二维数组来接收五个字符串。统计每一个字符串的ASCII码并存入一个整型数组中,再对该数组中的的值进行由大到小的排名(即统计该元素在所有元素中的排序位置),根据该排名情况从大到小输出对应的字符串。
#include<stdio.h>
#define N 5
#define M 10
int main(){
void compare(char a[][M],int b[]); //函数声明
int i,j;
char a[N][M]={'\0'},*p; //定义一个字符型二维数组(并置空)用于存放N个字符串,指针变量用于每个字符串的输入和输出
int b[N]={0}; //存放这N个字符串的排名结果
/*--接收输入的字符串--*/
for(i=0;i<N;i++){
printf("输入第%d个字符串:",i+1);
p=&a[i][0];
gets(p);
}
/*--对这N个字符串比较大小并排名--*/
compare(a,b);
/*--按照排名输出对应的的字符串--*/
printf("这%d个字符串从大到小排列为:\n",N);
for(i=0;i<N;i++){{}
for(j=0;j<N;j++)
if(b[i]==j)break;
p=&a[j][0];
puts(p);
}
return 0;
}
/*--比大小--*/
void compare(char a[][M],int b[]){
int i,j,t,max,k;
int size_str;
int c[N]; //存放每个字符串的ASCII码值
/*计算字符串大小并存储其值*/
for(i=0;i<N;i++){
for(j=0,size_str=0;a[i][j]!='\0';j++)
size_str+=a[i][j];
c[i]=size_str;
}
/*--依据每个字符串大小进行排名(非排序)--*/
for(j=0;j<N;j++){
for(i=0,max=c[0],k=0;i<N;i++)
if(max<c[i]){
max=c[i]; //交换本轮最大者
k=i; //记录本轮最大者序号
}
b[j]=k;
c[k]=-1; //本轮最大者置负(因为所有字符ASCII码都是非负的字符串当然也是。最大者置负数就不会影响下一轮最大者)
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/82668.html