存疑571D

这篇博客通过两个不同的方法展示了如何使用指针对字符串进行比较和交换。第一种方法使用二级指针实现字符串交换,第二种则通过strcpy函数完成。文章讨论了二级指针在字符串交换中的必要性,以及一级指针在某些情况下的有效性。作者还分享了自己尝试自定义strcmp函数失败的经验,强调在解决问题时先尝试已有的库函数。
摘要由CSDN通过智能技术生成

存疑:571D字符串比较大小。以及字符串交换函数。
收藏中方法涉及到二级指针。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void swap(char a,char** b)//输入的参数是二级指针(指针的地址)**
{
char* temp;//对指针(内容的地址)进行改变
*temp= a;//改变一件事,要传入它的地址,改变地址,就要传入地址的地址
**a= b;//地址和指针temp等同
*b=temp;
}
int main()
{
char a[50],b[50],c[50];
scanf("%s%s%s",a,b,c);//为什么不用空格 ?
char *p1=a,*p2=b,p3=c;
if(strcmp(p1,p2)>0) swap(&p1,&p2);// 要交换地址p1,所以swap中的参数是p1的地址
if(strcmp(p1,p3)>0) swap(&p1,&p3);//为什么strcmp中不是
p1,p1可以表示字符串吗??字符数组本来就是第一个字符的地址,p1=a
if(strcmp(p2,p3)>0) swap(&p2,&p3);
printf("%s\n%s\n%s\n",p1,p2,p3);//p1=a,字符数组也用第一个字符的地址表示,所以可以用指针
return 0;
}

571E题的解答方法证明一级指针便可传递数组首地址,并且全域可用。所以二级指针是为何呢?

#include
#include
/* 输入3个字符串,按从小到大的顺序输出。要求使用指针的方法进行处理。
输入 3行,每行一个用字符串。保证每个字符串的长度不超过20。
输出 按从小到大的顺序输出这3个字符串,每个字符串一行. */
void swap(char s[], char a[]) {
char t[30];
strcpy(t, s);
strcpy(s, a);
strcpy(a, t);

}
int main()
{
char a[30], b[30], c[30];
gets(a);
gets(b);
gets©;
if (strcmp(a, b) > 0)
swap(a, b);
if (strcmp(a, c) > 0)
swap(a, c);
if (strcmp(b, c) > 0)
swap(b, c);
puts(a);
puts(b);
puts©;
return 0;
}

原因在于法一的swap是自己交换数组地址,法二使用strcpy复制函数。并且法一用二级指针正好说明了地址不能直接交换。算法笔记68页误区的实例。

我自己的做法,自己实现strcmp函数,失败。
教训:可先运用函数解决,如无法通过再自主实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值