1. 程式人生 > 實用技巧 >計算機程式設計實訓記錄(6)

計算機程式設計實訓記錄(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;
}

但是這樣的話地址根本沒有變啊,和題目要求的不一樣。