前言
當我們在使用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);
}
執行結果

沒有留言:
張貼留言