計算機程式設計實訓記錄(6)
這幾天都在摸魚ヽ(✿゚▽゚)ノ導致進度太慢了,所以趕緊寫吧
上一篇我們搞定了五個函式,這篇就繼續寫剩下的函式吧。
課程任務
交換C-字串
要求完成 4 個函式的設計,包括函式原型設計、函式定義、測試程式碼中函式呼叫。請思考 SWAP1 函式
和 SWAP2(或 SWAP3)函式應用場合能否互換,其原因是什麼。要求函式原型設計時儘量做到精準。
雖然這麼說但是要求在哪裡啊(っ °Д °;)っ
在翻了翻檔案後,還是找到了。
SWAP1
char array1[10]="Tom", array2[10]="Jerry";
傳入的是兩個字元陣列的指標,那就直接遍歷一遍就好了
void SWAP1(char*a,char*b)
{
char t;
for(;*a||*b;a++,b++)
{
t=*a;
*a=*b;
*b=t;
}
}
SWAP2
char array1[]="Tom", array2[]="Jerry";
char *p1=array1, *p2=array2;
不難看出,傳入的兩個指標是分別指向字元陣列array1和array2的,用一個二重指標交換他們的值就好了。
void SWAP2(char** a,char** b) { char*t=*a; *a=*b; *b=t; }
這裡有一個問題,就是傳參的時候得用SWAP2(&p1, &p2);
來取地址,我曾試過用void SWAP2(char** &a,char** &b)
,但好像不通過。
不管了不管了,在課程檔案的test.c裡面並沒有規定呼叫方式
SWAP3
char *p1="Tom", *p2="Jerry";
這裡是字串指標。
他們是指向靜態儲存區的字串的指標,按理說同樣交換一下就好了。
void SWAP3(char** a,char** b)
{
char*t=*a;
*a=*b;
*b=t;
}
真的這麼簡單嗎(心虛)
STRCAT
================================= in test4() ==================================
p1: "Tom", p2: "Jerry"
指標所記錄的地址值 p1: 672F18, p2: 670C60
--- 呼叫自定義函式 STRCAT,用" & "連線兩個字串 ---
指標所記錄的地址值 p1: 670C70, p2: 670C60
--- 請注意觀察指標 p1 前後兩次所指向的地址值是否改變 ---
p1: "Tom & Jerry", p2: "Jerry"
============================= return from test4() =============================
或許可以按照上一篇的StrCat來修改:
char* STRCAT(char *dst, const char *src)
{
char *p=" & ";
char *temp = dst;
while (*temp != '\0')
temp++;
while ((*temp++ = *p++) != '\0');
temp--;//退一位
while ((*temp++ = *src++) != '\0');
return dst;
}
但是這樣的話地址根本沒有變啊,和題目要求的不一樣。