三个字符串由小到大输出
/*********************************************输入三个字符串************
***********由小到大输出*************
***********************************/
#include <stdio.h>
#include <string.h>
void main()
{
void swap(char *p1, char *p2);
char a1, a2, a3;
char *p1, *p2, *p3;
printf("请输入三个字符串: \n");
gets(a1);gets(a2);gets(a3);
p1 = a1;p2 = a2;p3 = a3;
printf("\n 这三个字符串由小到大的顺序为:\n");
if( strcmp(a1, a2) > 0 )
{
swap(p1, p2);
}
if( strcmp(a1, a3) > 0 )
{
swap(p1, p3);
}
if( strcmp(a2, a3) > 0 )
{
swap(p2, p3);
}
printf("%s\n%s\n%s\n", a1, a2, a3);
}
void swap(char *p1, char *p2)
{
char temp;
strcpy(temp, p1);
strcpy(p1, p2);
strcpy(p2, temp);
}
按照课后习题答案打出来的, 可是运行结果不正确,求大神们指点。菜鸟刚开始飞 /***********************************
**********输入三个字符串************
***********由小到大输出*************
***********************************/
#include <stdio.h>
#include <string.h>
void main()
{
void swap(char *p1, char *p2);
char a1, a2, a3;
char *p1, *p2, *p3;
int a, b, c;
printf("请输入三个字符串: \n");
gets(a1);gets(a2);gets(a3);
a = strlen(a1);b = strlen(a2); c = strlen(a3);
p1 = a1;p2 = a2;p3 = a3;
printf("\n 这三个字符串由小到大的顺序为:\n");
if( a > b )
{
swap(p1, p2);
}
if( a > c )
{
swap(p1, p3);
}
if( b > c )
{
swap(p2, p3);
}
printf("%s\n%s\n%s\n", a1, a2, a3);
}
void swap(char *p1, char *p2)
{
char temp;
strcpy(temp, p1);
strcpy(p1, p2);
strcpy(p2, temp);
}
修改过后的,可以运行成功,不过就是不知道上面那个程序哪里出错了 本帖最后由 orino 于 2018-1-16 20:46 编辑
你这个由小到大的定义是什么?比长度大小还是比字符大小?strcmp比较的字符大小,例如比较的两个字符串a和b,分别从第一个字符开始比,a和b比较,如果a>b返回>0的值,小于则返回<0的值,相等的话继续比较下一个a和b,直到全部比完都相等,则返回0。具体返回值取决于C的实现,VC返回值直接是a-b的值。
举例说明strcmp
"abcd" < "xyz"
a的ASCII小于x
"XYZ" <"abcd"
X的ACSII小于a 你如果只是比较长度,那么比较strlen就行了 orino 发表于 2018-1-16 20:43
你这个由小到大的定义是什么?比长度大小还是比字符大小?strcmp比较的字符大小,例如比较的两个字符串a和b ...
嗯嗯 理解了 谢谢
页:
[1]