C語言中通過分隔符來擷取字串

2021-08-27 01:46:51 字數 1277 閱讀 7464

最近在工作中要實現這樣乙個功能:

從乙個文字檔案中按行讀取資料,一行資料中每一列都可能含有空格,所以你要把空格給擷取出來。列之間是通過tab鍵分割的。

我在一開始使用了c的庫函式strtok這個函式。

先介紹一下strtok這個函式原型:

char *strtok(char *src, char *flag)

引數一是你要擷取的字串,引數2是字串中的分隔符。

看一下linux的man手冊是如何結束這個函式的功能的:

這個函式的作用是從字串中提取出分隔符號。

也就說乙個字串如果是用\t作為分隔符的話,你使用這個函式後得到的是乙個去掉了\t的字串,返回了這個字串的首位址。

在字串中原分隔符的位置,使用\0替換了原來的分隔符。所以你在使用的時候要注意了,如果你的目標字串包含了多個分隔符,你應該這樣使用這個函式:

char *tmp="abc123abc"; //分隔符是\t

char *p=strtok(tmp,"\t"); //p指向了abc

char *p1=strtok(null, "\t"); //p1指向了123

char *p2=strtok(null, "\t"); //p2指向了abc

但是如果你遇到了這樣的情況,那麼這個函式就不會起作用了:

char *tmp="abc abc"; //分隔符是\t,注意第二個是空格

char *p=strtok(tmp,"\t"); //p指向了abc

char *p1=strtok(null, "\t"); //p1指向了abc,不會取出你想要的空格

char *p2=strtok(null, "\t"); //p2會報錯的

還有就是這個函式不是執行緒安全的,linux推薦使用函式strtok_r函式。

顯然這個函式沒有辦法實現我要的功能的,於是我就自己寫了乙個函式來實現這個功能:

我的函式如下:

void mystrtok(char *tmp, char flag, char **p1, char **p2, char **p3)

tmp++; i++; } *p1=ptr; *p2=ptr+a[0]+1; *p3=ptr+a[1]+1;

} 在函式外部,你可以定義三個一級指標,如 char *p1, char *p2, char *p3,

這樣就可以使用了上面的函式了:

mystrtok(tmp, '\t', &p1, &p2, &p3);

這樣的話,你就可以擷取到每乙個被分隔符分割的字串了,包括空格.

C語言實現按分隔符來擷取字串

解決方法 使用c語言中的strtok 函式實現 實現 下面 的功能是將字串 now is the time for all good men to come to the aid of their country 以逗號作為分隔符來擷取,並將截取出的字串列印出來 include include in...

SQL操作 根據分隔符擷取字串

小小小收藏夾 2009 09 08 09 52 59 閱讀558 字型大小 大中小 訂閱 示例 傳入多個email位址,通過每個email位址間的 分隔符,將各email位址分開。select from dbo.uf split aa aa.com,bb bb.com,cc cc.com,dd dd...

Oracle函式,按分隔符擷取字串 問題點數

今天因工作需要,寫了乙個小函式,按分隔符擷取字串的,分享出來,希望有需要的朋友能用到。功能例項 substrbysep aaa,bb,ccccc,ddd,vvv 3 返回結果 ccccc 函式 create or replace function substrbysep sourcestring v...