解题思路:
找一个空函数(空容器),通过字符串的比较函数和复制函数,分别对三个字串进行比较,按照顺序进行复制,最后输出。
涉及知识点:
当两个字符串(a1与a2)比较时,如果a1的字符串大于a2的字符串,那么strcmp(a1,a2)的值为正整数,也就是大于0,反之如果小,则为负整数,也就是小于0,当他两个相等,那么他们的比较值为0;
代码如下:
#include<stdio.h> #include<string.h> #define zz 100 //注意定义字符串数组时,值不要太小,太小了会出现运行错误。 int main() { char a[zz],b[zz],c[zz]; char x[zz];//空容器 scanf("%s %s %s",a,b,c);//获取字符串 if(strcmp(a,b)>0)//比较1,并进行交换。 { strcpy(x,a); strcpy(a,b); strcpy(b,x); } if(strcmp(a,c)>0)//比较2,并进行交换。 { strcpy(x,a); strcpy(a,c); strcpy(c,x); } if(strcmp(b,c)>0)//比较3,并进行交换; { strcpy(x,b); strcpy(b,c); strcpy(c,x); } printf("%s\n%s\n%s\n",a,b,c);//输出交换后的字符串。 return 0; }
0.0分
39 人评分
为什么我这个运行错误?在我自己的编译器上运行过是和样例完美符合的。 #include<stdio.h> int main() { char a[3],b[3],c[3]; scanf("%s%s%s",a,b,c); printf("%s\n%s\n%s\n",c,b,a); return 0; }
#include <stdio.h> #include <string.h> char zifu(char (*a)[100]); int main() { char a[3][100]; int i,j; for(i=0;i<3;i++) { scanf("%[a-z]s",a[i]); getchar(); } zifu(a); for(i=0;i<3;i++) { printf("%s\n",a[i]); } } char zifu(char (*a)[100]) { char b[100][100]; int i=0,j=0,t; for(i=0;i<2;i++){ if(a[i][j]>a[i+1][j]){ strcpy(b[0],a[i]); strcpy(a[i],a[i+1]); strcpy(a[i+1],b[0]); } } for(i=0;i<2;i++){ if(a[i][j]==a[i+1][j]){ j++; if(a[i][j]>a[i+1][j]){ strcpy(b[0],a[i]); strcp
#include<stdio.h> #include<string.h> int main() { char a[100],b[100],c[100]; scanf("%s%s%s",a,b,c);//获取三行字符串,放到数组中 if(strcmp(a,b)>0) { if(strcmp(a,c)<0) printf("%s\n%s\n%s",b,a,c); else { if(strcmp(b,c)>0) printf("%s\n%s\n%s",c,b,a); else { printf("%s\n%s\n%s",a,c,b); } } } else { if(strcmp(a,c)>0) printf("%s\n%s\n%s",c,a,b); else { if(strcmp(b,c)>0) printf("%s\n%s\n%s",a,c,b);
用strcpy函数的话,如果字符串长度不一样,那么最后输出的字符串就全乱了,当这个题目的要求的字符串的长度是一样的,所有被踢不需要考虑。我写出来是为了提醒大家慎用
放一个指针版本的 #include <stdio.h> #include <string.h> int main(int argc,const char *argv[]) { char str1[100],str2[100],str3[100]; gets(str1); gets(str2); gets(str3); char *p1=str1,*p2=str2,*p3=str3,*p4; if(strcmp(p1,p2)>0){ p4=p1; p1=p2; p2=p4; } if(strcmp(p1,p3)>0){ p4=p1; p1=p3; p3=p4; } if(strcmp(p2,p3)>0){ p4=p2; p2=p3; p3=p4; } puts(p1); puts(p2); puts(p3); return 0; }
大神们,求教,帮我看一下错的地方,一直输出白色方框。。 #include<stdio.h> #include<string.h> char fun(char a[100],char b[100],char c[100]) { char x[100]; if(strcmp(a,b)>0) strcpy(x,a); strcpy(a,b); strcpy(b,x); if(strcmp(a,c)>0) strcpy(x,a); strcpy(a,c); strcpy(c,x); if(strcmp(b,c)>0) strcpy(x,b); strcpy(b,c); strcpy(c,x); printf("%s\n%s\n%s\n",a,b,c); } int main() { char a[100],b[100],c[100]; scanf("%s%s%s",a,b,c); fun(a,b,c); return 0; }
C杯 2019-08-16 19:39:38 |
if后面应该有花括号,没有花括号的话默认是if下面的一行属于if判断后执行的语句
W之谜 2021-08-16 14:44:05 |
#include<stdio.h> #include<string.h> char fun(char a[100], char b[100], char c[100]) { char x[100]; if (strcmp(a, b) > 0) { strcpy(x, a); strcpy(a, b); strcpy(b, x); } if (strcmp(a, c) > 0) { strcpy(x, a); strcpy(a, c); strcpy(c, x); } if (strcmp(b, c) > 0) { strcpy(x, b); strcpy(b, c); strcpy(c, x); } printf("%s %s %s ", a, b, c); } int main() { char a[100], b[100], c[100]; scanf("%s%s%s", a, b, c); fun(a, b, c); return 0; }
A+B for Input-Output Practice (VII) (C语言代码)浏览:1414 |
字符串的输入输出处理 (C语言代码)浏览:2055 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:623 |
最小公倍数 (C语言代码)浏览:894 |
简单的a+b (C语言代码)浏览:564 |
母牛的故事 (C语言代码)浏览:739 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)from DQM浏览:773 |
IP判断 (C语言代码)浏览:592 |
C语言程序设计教程(第三版)课后习题9.10 (C语言代码)浏览:660 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:559 |
峰华 2020-02-18 13:43:32 |
第一个比较是为了得出a和b中的最小,从而交换位置,使得a,b中的最小的那个赋值给a;第二个比较是为了得出a,b,c,中的最小,因为第一个比较已经得出a>b,从而使得两者中最小的那个赋给了a,接下来就是要比较a是否比c还小从而交换位置使得三者中最小的值赋值给a,第二个的比较就是为了得出三者中的那个最小值,但是得不出b与c的大小关系;第三个比较是为了比较b与c的大小,从而确定三者中的中间值和最大值。
小洛克 2021-12-02 20:03:44 |
比如3,2,1。第一次后成2,3,1。第二次后成1,3,2。所以要第三次比较。