以下程式以空格切割字串 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月 */
編譯後執行,結果如下
您可以繼續參考
字串處理 string.h
- char *strcpy(char *s1, const char *s2);
- char *strncpy(char *s1, const char *s2, size_t n);
- char *strcat(char *s1, const char *s2);
- char *strncat(char *s1, const char *s2, size_t);
- int strcmp(const char *s1, const char *s2);
- int strncmp(const char *s1, const char *s2, size_t n);
- char *strchr(const char *s, int c);
- size_t strcspn(const char *s1, const char *s2);
- size_t strspn(const char *s1, const char *s2);
- char *strpbrk(const char *s1, const char *s2);
- char *strrchr(const char *s, int c);
- char *strstr(const char *s1, const char *s2);
- char *strtok(char *s1, const char *s2);
- size_t strlen(const char *s);
- void *memcpy(void *s1, const void *s2, size_t n);
- void *memmove(void *s1, const void *s2, size_t n);
- int memcmp(const void *s1, const void *s2, size_t n);
- void *memchr(const void *s, int c, size_t n);
- void *memset(void *s, int c, size_t n);
6 則留言:
宣告的 char t[] = " "; 沒用到
t[]本來應該是要用作參數的,沒用到其實也不會影響執行結果。
每個段行 有辦法分別當成各個字串來用嗎?
可以用字串陣列儲存每一次分割出的子字串,例如
#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 ;
}
請問為什麼要宣告成char *t[6];
宣告char t[6]為什麼會停止運作
因為 test 也是指標,所以
t[i] = test
就是指標指派給指標,另一方面宣告成 char *t[6] 是要儲存 6 個字串的指標,如果沒有宣告成指標陣列的話, char t[6] 就只是具有 6 個字元的陣列。
張貼留言