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

供稿:hz-xin.com     日期:2025-01-13
用C语言,输入三个字母,按字母表顺序输出这三个字母。

#incldueint main(){char a,b,c,t;scanf("%c%c%c",&a,&b,&c);//注意输入没有空格的,直接就这3个字母if (a>b) {t=a;a=b;b=t;}if (a>c) {t=a;a=c;c=t;}if (b>c) {t=c;c=b;b=t;}printf("%c %c %c
",a,b,c);return 0;}

#include
int main( )
{char s[100],*p,*p1,*p2,c;
gets(s); //读取字符串
for(p=s;*p;p++); //求得串长,p指向'\0'
p--; //冒泡排序外循环终点
for(p1=s;p1<p;p1++,p--) //此二重循环为冒泡排序
for(p2=s;p2<p;p2++)
if(*p2>*(p2+1))
{c=*p2;*p2=*(p2+1);*(p2+1)=c;}
puts(s);
return 0;
}

程序2:
#include
int main( )
{char s1[100],s2[100],s3[200],s4[200],*p,*p1,*p2;
gets(s1); //读取二个字符串
gets(s2);
for(p=s1,p1=s3;*p;) //复制s1到s3前部
*(p1++)=*(p++);
for(p=s2;*p;) //复制s2到s3后部
*(p1++)=*(p++);
*p1=*p; //设置字符串尾
for(p=s2,p1=s4;*p;) //复制s2到s4前部
*(p1++)=*(p++);
for(p=s1;*p;) //复制s1到s4后部
*(p1++)=*(p++);
*p1=*p; //设置字符串尾
for(p1=s3,p2=s4;*p1==*p2;p1++,p2++); //比较s3与s4逐个字符的大小,直到遇到不同的字符
if(*p1>*p2)puts(s3); //输出较大字符所在的字符串
else puts(s4);
return 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[j]))
{
temp=n[i]; n[i]=n[j]; n[j]=temp;
}
问题出在这里啦

strcmp返回值是大小,但你用if(strcmp(*n[i],*n[j]))
的话只会检查是否等于0,不等于0则执行后面。。
所以应该是if(strcmp(*n[i],*n[j])<0).

(strcmp太久没用忘了,要是不行换>0试试,不知道是>还是<)

问题出在你的ex()函数中,排序算法用的是传地址,而不是传具体值,所以跳出ex()函数以后,所有局部操作全都作废
char *temp改成char temp;
temp=n[i]; n[i]=n[j]; n[j]=temp; 改成temp=*n[i]; *n[i]=*n[j]; *n[j]=temp;应该就可以了

C语言:输入三个字符串并按字母顺序排序后输出
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]);} voi...

《C语言程序设计》(谭浩强第五版) 第8章 善于利用指针 习题解析与答 ...
1. 输入三个整数并按从小到大的顺序输出。程序解析:使用指针接收输入的整数,比较并调整指针指向以实现排序输出。运行结果:将三个整数按从小到大的顺序正确输出。2. 输入三个字符串并按字母顺序排序输出。程序解析:同样利用指针接收字符串输入,通过比较字符进行排序。运行结果:三个字符串按字母顺序正确...

谁能帮帮我用C语言编出"输入三个字符串按英文字母顺序排列后输出"
dadalili 有没有搞错,就你那三角猫的功夫还跟我挣~~~我已经发现你好几次了哈 人家要的是字符串比较不是字符比较。~~无视你~~

C语言问题 输入三个字符串,按由小到大的顺序输出
char temp[100];temp==q1;q1==q2;q2==temp;==换成=,=才是赋值运算符。2、换用其他方法 可以使用三个数组,或者是一个二维数组来存储字符串,同时定义一个指针数组,指向三个字符串的首地址,然后对指针数组进行排序。

C++输出三个字符窜要求按字母由小到大或由大到小输出
代码是按从小到大排序的,输出顺序或者排序的顺序楼主可以根据需要自己修改。代码1:include <iostream> include <cstring> \/*包含这个头文件是因为要用到函数strcmp(const char*, const char*),它是用来按字典序比较两个字符数组大小的。若前者大,返回值为正;若后者大,返回值为负;若相等,返回值...

...然后将程序改为:输入三个字符串,按由小到大的顺序输出。
include <stdio.h> include <string.h> void CompareInt(int* a, int* b, int* c){ if( *a >= *b && *a >= *c ){ if( *b >= *c ){ printf("%d %d %d", *c, *b, *a);} else { printf("%d %d %d", *b, *c, *a);} } if( *b >= *a && *b >= *c...

c语言编程:请输入三个字符串,每行60个字符,要求统计出其中共有多少个...
include <stdio.h>int main(){ char str[3][61],*p; int up,low,blank,punc; int i; for(i=0;i<3;i++) gets(str[i]); up=low=blank=punc=0; for(i=0;i<3;i++) { p=str[i]; for(p=str[i];*p!='\\0';p++) { if(*p>='A'...

输入三个字母,按字母表顺序从前到后输出这各个字母。
program paixu;var a:array[1..30] of char;b:array[1..30] of integer;i,i1,i2,i3,n:integer;begin repeat n:=n+1;read (a[n]);until a[n]='.';for i:=1 to n do b[i]:=ord(a[i]);for i:=1 to n do for i1:=1 to n do if b[i]>b[i1] then begin fo...

C语言函数题,编写函数将输入字符串的前三个字母移到最后
include<string.h> define MAXS 10 void Shift(char s[]);void GetString(char s[]);\/*实现细节在此不表*\/ int main(){ char s[MAXS];GetString(s);Shift(s);printf("%s\\n",s);return 0;} \/*你的代码将被嵌在这里*\/ 代码:void Shift(char s[]){ int len=strlen(s);if(...

编写一个程序,输入a,b,c三个值,按从小到大的顺序输出。C#
编写一个程序,输入a,b,c三个值,按从小到大的顺序输出。C static void Main(string[] args){ int a, b, c;Console.WriteLine("请输入三个数");a = int.Parse(Console.ReadLine());b = int.Parse(Console.ReadLine());c = int.Parse(Console.ReadLine());if(a<b&&a<c&&b<c){ Cons...