strtok的實現與原理

2021-08-15 20:13:06 字數 1975 閱讀 9278

該函式包含在"string.h"標頭檔案中

函式原型:

char* strtok (char* str,constchar* delimiters );
函式功能:

切割字串,將str切分成乙個個子串

函式引數:

str:在第一次被呼叫的時間str是傳入需要被切割字串的首位址;在後面呼叫的時間傳入null。

delimiters:表示切割字串(字串中每個字元都會 當作分割符)。

函式返回值:

當s中的字元查詢到末尾時,返回null;

如果查不到delimiter所標示的字元,則返回當前strtok的字串的指標。

使用strtok()函式:

#include#include

int main(void

) return0;

}

預計輸出結果:

"hello boy this is heima "

實際執行結果:

得到的結論:

strtok在切割字串的時間,實際上就是將分割符的字元delimiter替換為'\0'並且返回首位址。

函式**:

#include#include

//根據函式原型實現strtok()函式

char* mystrtok_origin(char* str_arr,constchar* delimiters,char**temp_str)

//2、跳過待分解字串

//掃瞄delimiters字元開始的所有分解符

str_arr +=strspn(str_arr, delimiters);

//3、判斷當前待分解的位置是否為'\0',若是則返回null,否則繼續

if(*str_arr =='\0'

)

/** 4、儲存當前的待分解串的指標b_temp,呼叫strpbrk()在b_temp中找分解符,

* 如果找不到,則將temp_str賦值為待分解字串末尾部'\0'的位置,

* b_temp沒有發生變化;若找到則將分解符所在位置賦值為'\0',

* b_temp相當於被截斷了,temp_str指向分解符的下一位置。

*/b_temp =str_arr;

str_arr =strpbrk(str_arr, delimiters);

if(str_arr ==null)

else

//5、函式最後部分無論找沒找到分解符,都將b_temp返回。

return

b_temp;}//

使用mystrtok來簡化mystrtok_origin函式

char* mystrtok(char* str_arr,constchar*delimiters)

int main(void

)

//2、使用mystrtok()函式

char*str1 = mystrtok(buf,"@"

);

while

(str1)

return0;

}

完美實現!!!

拓展知識點:可重入與不可重入函式

可重入函式:

指乙個可以被多個任務呼叫的函式(過程),任務在呼叫時不必擔心資料是否會出錯。

不可重入函式:

如果函式介面的**實現中在塊內定義和使用了static儲存型別的變數,這種函式將是不可重入函式。它在實時系統中是不安全函式

strtok 函式的實現

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

strtok函式及其實現

標頭檔案 include 定義函式 char strtok char s,const char delim 函式說明 strtok 用來將字串分割成乙個個片段。引數s 指向欲分割的字串,引數delim 則為分割字串,當 strtok 在引數s 的字串中發現到引數delim 的分割字元時則 會將該字元...

Linux學習 strtok函式的基本實現

分解字串為一組字串。s為要分解的字元,delim為分隔符字元 如果傳入字串,則傳入的字串中每個字元均為分割符 首次呼叫時,s指向要分解的字串,之後再次呼叫要把s設成null。標頭檔案 include 原型 char strtok char s,const char delim 使用null才可以獲取...