前言
當我們在使用C語言做字串分割時,大家都知道string.h的library裡面,有很好用的function可以調用,而這function就是strtok或strtok_r。
不知道有沒有人跟我一樣國文造詣實在很差,看了看網路上的文章還是不是很懂在這函式的運作方法…所以我就來看一下Source Code,並寫一個簡易的程式來讓大家理解理解用法吧!
------
簡介
想必在網路上最容易找到strtok的用法,我個人認為strtok_r反而是比較直觀的做法…所以接下來我都使用strtok_r做範例!
首先我們來看看strtok家族的長相吧!
str: 被切割的字串起始記憶體位址。
delim: 切割條件。
saveptr: ...
想了快一個小時,我也想不到好方法表達我想說的內容…可見我國文多爛ˊ口ˋ|
直接來看圖範例吧!!
--------
範例
假設:
str = "ab,,cd,,,ef";
delim = ",";
呼叫函式方法: token = strtok_r ( str, delim, &saveptr);
執行結果會如下圖:
------
實作
以下是個簡單的範例程式,搭配上面的圖解應該不難了解吧!
注意:為了方便觀察,string_show函式內裡面把 '\0'都改成顯示 '*'
strtok_r.c
#include <stdio.h> #include <stdlib.h> #include <string.h> static void string_show(char *str_in, int len) { int i; for (i = 0; i < len; i++) { if ( *(str_in + i) != '\0') printf("%c", *(str_in + i)); else printf("%c", '*'); } printf("\n"); } int main(void) { int len = 0, count = 0; char *str = NULL, *delim = ",", *token = NULL, *rest_of_str = NULL; str = strdup("123,456,789,,5566,2266,,,1999,2015"); //record the length of the origin str. len = strlen(str); //start strtok_r token = strtok_r( str, delim, &rest_of_str); count++; while( token != NULL) { printf("\n-------------count:%d-------------\n", count); printf("str:"); string_show(str, len); printf("token:%s\n", token); printf("rest_of_str:%s\n", rest_of_str); printf("----------------------------------\n"); token = strtok_r( rest_of_str, delim, &rest_of_str); count++; } free(str); }
執行結果
沒有留言:
張貼留言