C 語言標準函數庫分類導覽 - string.h strtok()

string.h 的函數 strtok() ,需要兩個字串參數,以第二個參數字串的內容切割第一個參數字串。



以下程式以空格切割字串 s
#include <stdio.h>
#include <string.h>

int main(void)
{
    char s[] = "Speech is si1ver, silence is gold.";
    char t[] = " ";
    char *test = strtok(s, " ");
    
    while (test != NULL) {
        printf("%s\n", test);
        test = strtok(NULL, " ");
    }
    
    return 0;    
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:cstrtok.c
    功能:示範 string.h 中函數 strtok() 的使用
    作者:張凱慶
    時間:西元2010年6月 */


編譯後執行,結果如下



您可以繼續參考


6 則留言:

Peter 提到...

宣告的 char t[] = " "; 沒用到

Kaiching Chang 提到...

t[]本來應該是要用作參數的,沒用到其實也不會影響執行結果。

KHANK 提到...

每個段行 有辦法分別當成各個字串來用嗎?

Kaiching Chang 提到...

可以用字串陣列儲存每一次分割出的子字串,例如
#include

int main() {
char s[] = "Speech is si1ver, silence is gold.";
char *t[6];
char *test = strtok(s, " ");
int i = 0;

while (test != NULL) {
t[i] = test;
printf("%s\n", t[i]);
test = strtok(NULL, " ");
i++;
}

return 0 ;
}

maninblack 提到...

請問為什麼要宣告成char *t[6];
宣告char t[6]為什麼會停止運作

Kaiching Chang 提到...

因為 test 也是指標,所以

t[i] = test

就是指標指派給指標,另一方面宣告成 char *t[6] 是要儲存 6 個字串的指標,如果沒有宣告成指標陣列的話, char t[6] 就只是具有 6 個字元的陣列。