分享一道C語言的經典的題目.題目要求如下:
利用字符指針實現字符串1“I Love China”與字符串2“So do I”的輸出。然后利用字符指針將字符串2的內容復制到字符串1中,然后輸出字符串1.
乍一看,沒什么大的問題,用一個strcpy()函數直接就可以解決掉,但是仔細讀題,指針!當時就沒怎么學懂,所以在這,記錄一下血與淚的辛酸史.
一、問題思路與代碼
先看下面一段代碼:
1 char string1[50]="I Love China."; 2 char string2[50]="So do I."; 3 char * p1,* p2; 4 p1=string1; 5 p2=string2;
很簡單的兩句話,初始化指針為兩個字符串的首地址.
接着,嘗試把字符串輸出.
1 for(p1;*p1!=0;p1++) 2 { 3 printf("%c",*p1); 4 }
string2原理相同,到這的話還是很簡單的嘛.
接下來,我們需要將字符串2的內容復制到字符串1中,啊哈,這才是重頭戲.
首先,我們一定要初始化指針,否則就是在原先的指針之后進行操作,然后進行如下操作:
1 for(;*p2!='\0';p2++,p1++) 2 {//將string2賦值到string1並將其覆蓋
3 *p1=*p2; 4 } 5 *p1='\0';
通過判斷是p2的地址否到達字符串的最后,來將他們的指針的值進行交換,輸出string1.好,問題解決.
二、思考
解決上一個問題之后,我們可以在這個問題上升升級,問題如果變成這樣呢?
利用字符指針實現字符串1“I Love China”與字符串2“So do I”的輸出。然后利用字符指針將字符串2的內容連接到字符串1中,然后輸出字符串1.
同樣,在使用過指正之后應該將指針初始化,這是一個良好的習慣.
然后,定義一個空指針p,使他初始化為string1(因為在開始初始化的時候,我們使用*p1來儲存string1中的值,所以這時候 1 for(p=p1;*p!='\0';p++); 就在通過指針間的作用將p進行初始化,這里我是為了使p指針移動到p1后的位置).
1 char *p; 2 int i; 3 for(p=p1;*p!='\0';p++); 4 for(i=0;*(p2+i)!='\0';i++,p++) 5 { 6 *p=*(p2+i); 7 } 8 *p='\0';
隨后,將p2的指針值添加到p后,這樣就完成了.