這幾天處理字串,突然遇到字串分割問題,上網查了一些資料後,找到這兩個函式,strtok與strsep函式。網上舉的例子千篇一律,下面我根據函式的實現原始碼,記錄一下使用說明,供大家討論,歡迎大牛拍磚!ps:找個庫函式原始碼的**查詢**真不容易,先找到了這個
之後,發現了經常去找軟體的oschina有原始碼庫,真是踏破鐵鞋無覓處,得來全不費工夫!
1 #include
2 #include
3 int main()
4 [root@ test]# ./strtok
abdczxbcdefgh
tok1:ab
tok1:zxb
總結:strtok內部記錄上次呼叫字串的位置,所以不支援多執行緒,可重入版本為strtok_r,有興趣的可以研究一下。它適用於分割關鍵字在字串之間是「單獨」或是 「連續「在一起的情況。
1 #include
2 #include
3 4 int main()
5 [root@ test]# ./strsep
abdzxbcdefgh
tok1:ab,token:zxbcdefgh
tok1:zxb,token:defgh
總結:strsep返回值為分割後的開始字串,並將函式的第乙個引數指標指向分割後的剩餘字串。它適用於分割關鍵字在兩個字串之間只嚴格出現一次的情況。
所以通過閱讀函式實現原始碼,可以靈活運用這兩個函式,為自己所用!
ps:因為函式內部會修改原字串變數,所以傳入的引數不能是不可變字串(即文字常量區)。
如 char *tokenremain ="abcdefghij"//編譯時為文字常量,不可修改。
strtok(tokenremain,"cde");
strsep(&tokenremain,"cde");
編譯通過,執行時會報段錯誤。
在使用strtok()的時候,可以發現,在分割標誌的時候,並不是乙個全部匹配:
1 #include
2 #include
3 int main(void)
4 13 return 0; 14 }~ ~
如果將第七行該為下面注釋的一行,那麼不可以將三個單詞分析分開來
但是如果是第七行修改而11行不修改 執行結果就知道是怎麼個情況了!!!!
分割字串函式split C
字串分割符 public const string separatorstring 取得字元的第幾個字元,通過分割符分割的字串,pos以1開始 字串 分割符 第幾個 返回第幾個字串 string str split rrrrddrew tqwewerewddccc 1 public static s...
SQL 字串分割函式
create function dbo f split sourcesql varchar 8000 strseprate varchar 10 returns temp table a varchar 100 as begin declare iint set sourcesql rtrim lt...
SQL 字串分割函式
create function dbo split input varchar max split varchar max returns table table col varchar max as begin while charindex split,input 0 begin insert ...