武斗怎么结束的?:求c语言遍一个程序??

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/03 02:59:56
任意输入5个字符串,调用函数按从大到小的顺序对字符串进行排序,在主函数中输出排序结果.
最好给个简洁的程序,分数好说......
superrays - 助理 二级 你这个好象不对啊! 看到了再改一下啊!

#include "string.h" /*字符串库*/
main()
{
char a[5][100];/*用来存放原始输入的数组:暂时认为每个字符串100字节,你可以按需要更改大小*/
char *px[5]; /*用来存放排序好的字符串指针,其中每个元素是一个字符串指针,指向初始输入的某个字符串*/
int i,c1,c2; /*三个临时变量*/
char *swp; /*用于交换指针的临时变量*/

printf("input:\n"); /*提示用户开始输入*/
for(i=0;i<5;i++) /*共五个字符串,故需要输入五次*/
{
px[i] = a[i]; /*初始化排序字符串为自然顺序,也就是说你输入的顺序*/
scanf("%s",a[i]); /*输入字符串*/
}
/*下面开始排序,用的是冒泡法,也就是说从第一个开始,和后面的4个比较,如果后面有比第一个大的就交换着两个位置,这就保证了第一个最大,然后拿第二个和后三个比保证第二个在2-4里面最大,以此类推整个字符串序列就有序了*/
for(c1 = 0; c1 <4; c1++) /*从第一个开始比较,当然了,当只剩下一个字符串没有排序的时候就不用排了,反正就他自己了没大没小,呵呵 所以循环是《4而不是〈5*/
{
for(c2=c1+1; c2 <5 ; c2++) /*用当前的字符串和右面的比较*/
{
if(strcmp(px[c1],px[c2]) < 0) /*strcmp 是一个tc提供的函数用来比较字符串大小,strcmp(char *a,char *b) 如果a>b返回正数 a <b 返回负数 a == b 返回0 ;这一行就是说如果当前数比它后面的某个数小的话就进行下面的处理*/
{
/*以下三行很简单,就是交换排序数组的指针,*/
swp = px[c1];
px[c1] = px[c2];
px[c2] = swp;
}
}
}
/*输出排序后的结果*/
for(c1 = 0; c1 < 5; c1++)
{
printf("\n %s",px[c1]);/*这里就是使用了px这个数组,因为他是经过排序的结果*/
}
}

// 其实就是一个冒泡排序的字符串版

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAX_INPUT_TIME 5
#define MAX_STRING_LEN 128

void main()
{
int i, j;
char tmp[MAX_STRING_LEN];
char val[MAX_INPUT_TIME][MAX_STRING_LEN];
for(i=0; i<MAX_INPUT_TIME; ++i)
{
memset(val[i], 0, sizeof(val[i]));
gets(val[i]);
}

for(i=0; i<MAX_INPUT_TIME; i++)
{
for(j=i+1; j<MAX_INPUT_TIME; j++)
{
strcpy(tmp, val[i]);
if( strcmp(val[j], tmp)>0 )
{
strcpy(val[i], val[j]);
strcpy(val[j], tmp);
}
}
}

for(i=0; i<MAX_INPUT_TIME; ++i)
puts(val[i]);
}

我上周在百度知道上有个回答,只不过用的指针的指针,我改成函数调用给你。http://zhidao.baidu.com/question/9023979.html这里。
只不过指针的指针**p不好理解,有问题消息我。
#include<stdio.h>
#include<string.h>

paixu(char **p){
char *temp;
int i,j;
for(i=0;i<5;i++){

for(j=0;j<5-i-1;j++){

if (strcmp(*(p+j),*(p+j+1))<0){
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
}
void main(){
char a[5][100],*test[5];//因为那个人一定要用指针,所以只好多申请了一个*test[5],其实真没必要.
char **p;
int i;

printf("请输入五个字符串:\n");
for(i=0;i<5;i++){
test[i]=a[i];
scanf("%s",test[i]);
}
p=test;
paixu(p);
printf("字符串按从小到大排序后是:\n");
for (i=0;i<5;i++,p++)
printf("%s\n",*p);
}

是5个字符串还是5个字符?如果是字符串的话是不是按照首字母的ASCII码的大小排序?

#include<stdio.h>
void paixu(char **a)
{
int i,j;
char *b;
for(i=0;i<5;++i)
for(j=i;j<5;++j)
if(*a[i]>*a[j])
{
b=a[i];
a[i]=a[j];
a[j]=b;
}
}
void main()
{
char **a;
int i;
for(i=0;i<5;++i)
gets(a[i]);
paixu(a);
for(i=0;i<5;++i)
puts(a[i]);
}

#include<stdio.h>
void paixu(char **a)
{
int i,j;
char *b;
for(i=0;i<5;++i)
for(j=i;j<5;++j)
if(*a[i]>*a[j])
{
b=a[i];
a[i]=a[j];
a[j]=b;
}
}
void main()
{
char **a;
int i;
for(i=0;i<5;++i)
gets(a[i]);
paixu(a);
for(i=0;i<5;++i)
puts(a[i]);
}

分数给不给?谁相信你?先给出分数再说,别骗人!