前兩天小測碰到一道題,建立一個函數,功能:實現字符數組中所有字母的倒序存放並輸出,一開始覺得簡單跟數字數組差不多,運行一下發現很多格式錯誤,這些是不必要的錯誤,現在就來說下,先說一下代碼思路:定義一個字符數組假如有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--; } }
運行結果:,要是數字數組的話也是差不多的。