strtok函式巢狀

2021-07-13 22:33:18 字數 1354 閱讀 1505

分解字串為一組字串。s為要分解的字元,delim為分隔符字元(如果傳入字串,則傳入的字串中每個字元均為分割符)。首次呼叫時,s指向要分解的字串,之後再次呼叫要把s設成null。

原型:extern char *strtok(char *s, char *delim);

用法:#include 

功能:分解字串為一組標記串。s為要分解的字串,delim為分隔符字串。

說明:首次呼叫時,s必須指向要分解的字串,隨後呼叫要把s設成null。

strtok在s中查詢包含在delim中的字元並用null('\0')來替換,直到找遍整個字串。返回指向下乙個標記串。當沒有標記串時則返回空字元null。

#include

#include

intmain(void)

注意!!!

1.strtok函式會破壞被分解字串的完整,呼叫前和呼叫後的s已經不一樣了。如果要保持原字串的完整,可以使用strchr和sscanf的組合等。

2.strtok函式不能巢狀呼叫!!!

strtok之所以可以在第一次使用strtok(char * src , const char * control)後,能夠通過呼叫strtok(null, control)來繼續分割字串,是因為在strtok函式內部定義了乙個靜態字元指標用以儲存下次要分割字串的位置,如果你要玩strtok巢狀的話,就會被這個靜態指標弄的一踏糊塗了。所以不能巢狀。

如果要解決使用strtok函式巢狀呼叫的功能,簡單易行的辦法將第一次strtok函式分解出來的字串儲存起來,在strtok函式迴圈結束,對每乙個子串起乙個strtok函式的迴圈

char *delim_1 = ";";

char *delim_2 = ",";

char *p = null;

char *q = null;

char* field_1[3] = ;

char* field_2[3][20] = ; 

char temp[100] = ;  

int total = 0;    

p = strtok(readbuff,delim_1);

total = atoi(p);

for (i = 0;i < 3;i++)

else

}for (i = 0;i < 3;i++)

else }}

for (i = 0;i < 3;i++)

else }}

strtok巢狀使用的解決方法

token strtok preadbuff,n while token null 上面的 期望實現的功能 是首先以換行符 n 分割字串,再以每一行的 號分割字串,但執行時發現,這個 只能實現一行字元的分割,其它行的都沒有處理 原因是 strtok 是不可以巢狀呼叫的!我推測,strtok 中是通過...

strtok函式簡析

官方的strtok函式,用來通過分隔字元 不支援字串,傳入的串中每個字元單獨當分隔符,如下例子組合的如123會處理1而23會被跳過 返回分隔的串的首位址 比如呼叫strtok abc123def 123456 返回值是指向abc的指標 下次要獲得 def 需要呼叫strtok null,123456...

strtok 函式的實現

strtok 是乙個庫函式,它的作用是把乙個字串按照指定的字串分割開,比如字串 nice to meet you 按照空格隔開分別為nice to meet you 那麼這個函式該怎麼實現呢?如下 include using namespace std char strtok1 char strin...