#include <stdio.h>
#include <string.h>
void cmp(char s[8],char t[80]);
void cpy(char a[80],char b[80]);
int main()
{
char s[5][80];
int i,j;
char *p[5];
for(i=0;i<5;i++)
p[i]=s[i];
printf("Input 5 strings:\n");
for(i=0;i<5;i++)
gets(p[i]);
for(i=0;i<5;i++)
{
for(j=i+1;j<5;j++)
{
cmp(p[i],p[j]);
}
}
printf("---------------------------\n");
for(i=0;i<5;i++)
puts(p[i]);
}
void cmp(char s[8],char t[80])
{
char string[80];
int i=0;
for(i=0;i<80&&t[i];i++)
if(s[i]>t[i])
{
cpy(string,s);
cpy(s,t);
cpy(t,string);
break;
}
else if (s[i]<t[i]) break;
}
void cpy(char a[80],char b[80])
{
int i;
for(i=0;b[i]!='\0'&&i<80;i++)
a[i]=b[i];
a[i]='\0';
}
这是一段冒泡排序思想的代码。
代码首先读取了5个字符串,接下来使用冒泡排序的方法。
其实这段代码的冒泡部分应该进行一下修改,修改为。
for(i=0;i<4;i++)
{
for(j=0;j<5-i-1;j++)
{
cmp(p[j],p[j+1]);
}
}
从第一个开始,依次比较p[0], p[1]; p[1],p[2]; p[2], p[3]; p[3], p[4],让字符串比较大的那一串升到5个字符串的最末尾端。
接下来,依次比较p[0], p[1]; p[1],p[2]; p[2], p[3];让前四个最大的,一路过关斩将升到第4个字符串的位置。
接下来,依次比较p[0], p[1]; p[1],p[2]; 让前三个里面最大的,一路过关斩将升到第3个字符串的位置。
接下来,p[0], p[1]; 让前两个比较大的,放到第二个的位置。
这样一来,就能够完成总体字符串的排序问题了。
下面的函数cmp是用于比较两个字符串的,如果前面的字符串比后面的字符串要大,就交换两个字符串的内容;否则就不变。
最下面的cpy函数是用来赋值的,将后面的字符串赋值给前面的参数中。
您好,我是问答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632