發信人: ax.bbs@bbs.ee.nthu.edu.tw. (athena), 信區: test
標  題: 星星流講座 0032
發信站: ☆清華電機☆ (Sat Jun 24 15:52:33 1995)
轉信站: star

星星流講座 0032         C 語言教室

第 5 講 之 8            陣列與指標
                        Topic: String manipulation

在前面我們提到了一個 strcpy() 的例子:

/* copy s2[] to s1[] */
void strcpy (char *s1, char *s2)
{
    while (*s1++ = *s2++)
        ;
}

這段程式並不容易懂,它原本是:

void strcpy (char *s1, char *s2)
{
    int i = 0;
   
    while (s2[i] != '\0')
    {
        s1[i] = s2[i];
        i++;
    }
}


我們改用指標來做:

void strcpy (char *s1, char *s2)
{
    while (*s2 != '\0')
    {
        *s1++ = *s2++;
    }
}


由於 while 迴圈中,若條件運算式的值等於 0,則迴圈中止執行,所以
最後的版本就變成:

void strcpy (char *s1, char *s2)
{
    while (*s1++ = *s2++)
        ;
}


當 *s2 == '\0' 時,則 *s1 = *s2 = '\0' = 0,所以 while 迴圈中斷
其執行。

string.h 中定義了不少好用的字串函數,例如 strcmp、strcat、strncpy
等等,現在請你查查它們的意義,並用 C 語言把這些函數實作出來,如同
我們上面實作 strcpy 這個函數一般。

--
本文原作者為徐振家,原作刊載於星星神教總壇 ☆清華電機☆ test 板。
你可以以電子文件的形式將本文自由流傳於台灣學術網路,但必須包含此版權聲明。
原作者依中華民國著作權法之規定,享有本文之著作權,請勿抄襲以免觸法。
未經授權任何人不得以任何形式對本文做任何修改及商業上之應用。
其他網路的轉載或其他用途的應用,請先知會作者,並取得其同意。
對本文有任何疑問或意見請 mail 給 ax.bbs@bbs.ee.nthu.edu.tw,謝謝。