C语言:输入三个字符串并按字母顺序排序后输出

来源:百度知道 编辑:UC知道 时间:2024/05/25 10:21:22
写一个程序,目的如题。
我编写的程序如下:

#include <string.h>
void main()
{
void ex(char *n[]);
char *name[3]; /*定义一个指针数组*/
char a[10],b[10],c[10];
int i;
name[0]=a; /*给指针数组的元素赋值*/
name[1]=b;
name[2]=c;
for(i=0; i<3; i++)
scanf("%s",name[i]);
ex(name);
printf("\n");
for(i=0; i<3; i++)
printf("%s\n",name[i]);
}

void ex(char *n[])
{
char *temp;
int i,j;
for(i=0; i<2; i++)
for(j>i; j<3; j++)
if(strcmp(*n[i],*n[j]))
{
temp=n[i]; n[i]=n[j]; n[j]=temp;
}
}

运行后输入:
japan
korea
china

预期输入:
china
japan
korea

但结果却输出:
japan
korea
china

与输入相比没有变化,请问哪里需要作修改?
谢谢!
jandy123说的好像不对,如果照你说的,每次检查都不会是0,所以每次都要运行后面的语

我不大会改程序,这是我写的程序,我试过可以了,与你的要求符舍。
#include <stdio.h>
#include <string.h>
void main()
{
void ex(char *n[]);
char *name[3];
char a[10],b[10],c[10];
int i;
name[0]=a;
name[1]=b;
name[2]=c;
for(i=0; i<3; i++)
scanf("%s",name[i]);
ex(name);
printf("\n");
for(i=0; i<3; i++)
printf("%s\n",name[i]);
}

void ex(char *n[])
{
char *temp;
int i,j;
for(i=0; i<2; i++)
for(j=i+1; j<3; j++)
if(strcmp(n[i],n[j])>0)
{strcpy(temp,n[i]);
strcpy(n[i],n[j]);
strcpy(n[j],temp);
}
getchar();
}
问题
1.strcmp返回值是大小,但你用if(strcmp(*n[i],*n[j]))
的话只会检查是否等于0,不等于0则执行后面。。
所以应该是if(strcmp(*n[i],*n[j]>0).
2.for(j>i; j<3; j++) 在fork中没有j>i的写法改一下就行了
3.数组之间的交换不能用=的方式,要用strcpy语句
这是我个人的看法,还有问题写我联系,我QQ:452497054
有兴趣的话交个朋友

if(strcmp(*n[i],*n