前两天小测碰到一道题,建立一个函数,功能:实现字符数组中所有字母的倒序存放并输出,一开始觉得简单跟数字数组差不多,运行一下发现很多格式错误,这些是不必要的错误,现在就来说下,先说一下代码思路:定义一个字符数组假如有n个字符,让一个指针变量*p指向首地址,*(p+n-1)就是末地址,然后实现*p与*(p+n-1)值的互换,这边让*q=*(p+n-1)每换一次,p++,q--,当p>q时退出循环,我们来看下代码:
1 #include "stdio.h" 2 char change(char *p,int y); 3 void main() 4 { 5 char a[6]="abcdef"; 6 change(a,6); 7 printf("%s",a); 8 } 9 char change(char *p,int y) 10 { 11 char *q; 12 int temp;//这边比较容易错,有的定性思维,会定义成char类型; 13 q=p+y-1; 14 while(p<q) 15 { 16 temp=*p; 17 *p=*q; 18 *q=temp; 19 p++; 20 q--; 21 } 22 }
这边只是令n=6,看的更清晰一点,要复杂一点的话,我们也可以自己输入字母,想要几个就几个,这次我用gets()来输入,假如输入n个,那我们怎么知道这个n的值,我们可以先定义*p1让p=a,既指向首地址,要是超过末地址也就是*(p+n)==0,这就给我们一个结束循环的条件:
#include "stdio.h" void main() { char a[1000]; gets(a); char *p; int i,n; i=0; p=a; while(*(p+i)!=0) { i++; } n=i; printf("%d",n); }
上面代码可以求出我们手动输入字母的个数再加上change()函数就可以了:
#include "stdio.h" char change(char *p,int y); void main() { char a[1000]; printf("input letter:\n"); gets(a); char *p1; int i,n; i=0; p1=a; while(*(p1+i)!=0)//超出地址结果为0 { i++; } n=i; change(a,n); printf("output:\n%s",a); } char change(char *p,int y) { char *q; int temp; q=p+y-1; while(p<q) { temp=*p; *p=*q; *q=temp; p++; q--; } }
运行结果:,要是数字数组的话也是差不多的。
原文:http://www.cnblogs.com/doudoublog/p/5041450.html