存疑: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函数,失败。
教训:可先运用函数解决,如无法通过再自主实现。