| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 29237 人关注过本帖
标题:输入3个字符串,按从小到大顺序输出。 用指针方法
只看楼主 加入收藏
lrui829
Rank: 2
等 级:论坛游民
帖 子:16
专家分:17
注 册:2016-3-31
结帖率:25%
收藏
 问题点数:0 回复次数:8 
输入3个字符串,按从小到大顺序输出。 用指针方法
输入3个字符串,按从小到大顺序输出。  //先用程序对三个数进行从小到大排序,然后修改程序
#include<stdio.h>
#include<string.h>
int main()
{void swap(char *pt1,char *pt2);
 char a[20],b[20],c[20];
 char *p1,*p2,*p3;
 printf("请输入三个字符串:");
 gets(a);
 gets(b);
 gets(c);
 //或用scanf("%s,%s,%s",a,b,c);
 p1=&a[0];p2=&b[0];p3=&c[0];//三个指针分别指向三个字符数组
 if(strcmp(*p1,*p2)>0)swap(p1,p2);//if(strcmp(a,b)>0)swap(a,b); //比较两个字符串的大小,为什么用前一句的时候会出现警告呢
警告内容:
E:\教学——梁锐\C语言程序设计 梁锐\15级电科\随堂题库\2-1-1.c(13) : warning C4047: 'function' : 'const char *' differs in levels of indirection from 'char '
E:\教学——梁锐\C语言程序设计 梁锐\15级电科\随堂题库\2-1-1.c(13) : warning C4024: 'strcmp' : different types for formal and actual parameter 1
E:\教学——梁锐\C语言程序设计 梁锐\15级电科\随堂题库\2-1-1.c(13) : warning C4047: 'function' : 'const char *' differs in levels of indirection from 'char '
E:\教学——梁锐\C语言程序设计 梁锐\15级电科\随堂题库\2-1-1.c(13) : warning C4024: 'strcmp' : different types for formal and actual parameter 2
这是么意思呢?搞不懂

 if(strcmp(a,c)>0)swap(a,c);//if(strcmp(*p1,*p3)>0)swap(*p1,*p3);
 if(strcmp(b,c)>0)swap(b,c);// if(strcmp(*p2,*p3)>0)swap(*p2,*p3);
 printf("由小到大排列:%s\n%s\n%s\n",a,b,c);
 return 0;
}

void swap(char *pt1,char *pt2)
{ char t[20];
   strcpy(t,pt1);
   strcpy(pt1,pt2);
   strcpy(pt2,t);
//t=*pt1;*pt1=*pt2;*pt2=t;
}
搜索更多相关主题的帖子: spanish 字符串 
2016-05-23 15:39
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
p1=&a[0];p2=&b[0];p3=&c[0];
printf("%c %c",*p1,*p2);   //你加上这句看看输出是什么,就知道了。需要用循环,让指针的位置后移,指针指向'\0'为止
//通过上面的输出,你看下下面这句比较的是两个字符串?还是比较两个字符串的第一个元素值
if(strcmp(*p1,*p2)>0)swap(p1,p2);
字符串比较大小,如果两个字符串的第一个字符即a[0]和b[0]相等怎么办?或者a[0]<b[0],你看下你的程序会怎么处理呢?


[此贴子已经被作者于2016-5-23 15:53编辑过]

2016-05-23 15:50
lrui829
Rank: 2
等 级:论坛游民
帖 子:16
专家分:17
注 册:2016-3-31
收藏
得分:0 
回复 2楼 wanglianyi1
你的意思是*p1和*p2是指向一个元素地址的,不是整个字符串,所以不能用strcmp(*p1,*p2)应该用strcmp(a,b)才行是么
2016-05-23 16:13
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
回复 3楼 lrui829
数组的第一个元素的地址和整个数组的首地址是同一个位置的。
printf("%c %c",*p1,*p2);// 这句的意思是打印指针p1,p2指向的字符。 这里的*是解引用的意思,你给strcmp()传递的是a[0]和b[0],而不是a,b两个数组的首地址,传递给strcmp()函数的两个参数类型是指针,你的函数调用不合适

[此贴子已经被作者于2016-5-24 08:50编辑过]

2016-05-23 16:53
lrui829
Rank: 2
等 级:论坛游民
帖 子:16
专家分:17
注 册:2016-3-31
收藏
得分:0 
回复 4楼 wanglianyi1
所以,指向字符数组的指针不能用在这种字符串函数中是么?
2016-05-23 17:28
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
回复 5楼 lrui829
可以用,是用的方法要对,你要逐个比较字符串中的字符大小,就要让指针动起来,不能只指着第一个元素,你要在比较第一组元素大小之后,让两个指针+1,指向后面的元素,同理让两个数组中的元素都一一对应来比较。而不是只比较两个数组的首个元素
字符串大小,从最左开始两个数组对应位置一组一组比,比他们的ASCII值。一旦某字符比出大小,就停止,否则比到完。

[此贴子已经被作者于2016-5-23 20:43编辑过]

2016-05-23 20:41
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
char a[20],b[20],c[20];
char *p1,*p2,*p3;
这样用
p1=a;
p2=b;
p3=c;
strcmp(p1,p2)
2016-05-24 08:43
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
2016-05-24 08:48
he1527385048
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2020-5-27
收藏
得分:0 
回复 6楼 wanglianyi1
那到底该怎么改呢,小白一个
2020-05-27 20:48
快速回复:输入3个字符串,按从小到大顺序输出。 用指针方法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.040927 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved