c 利用sscanf分割字元

2021-10-06 12:32:08 字數 1276 閱讀 7979

c++分割字串我一直是用自定義函式來做的,今天刷題看到乙個sscanf函式的用法竟然可以直接分割規則的字串,太強了,決定做個記錄。

資料格式:

%c 乙個單一的字元

%d 乙個十進位制整數

%i 乙個整數

%e, %f, %g 乙個浮點數

%o 乙個八進位制數

%s 乙個字串

%x 乙個十六進製制數

%p 乙個指標

%n 乙個等於讀取字元數量的整數

%u 乙個無符號整數

% 乙個字符集

%% 乙個精度符號

date = 「2019-06-30」

int year, month, day;

sscanf(date.c_str(), 「%d-%d-%d」, &year, &month, &day);

1.取到指定字元為止的字串。如在下例中,取遇到空格為止字串。

sscanf(「123456 abcdedf」, 「%[^ ]」, buf);

printf("%s\n", buf);

結果為:123456

2、給定乙個字串iios/12ddwdff@122,獲取 / 和 @ 之間的字串,先將 "iios/"過濾掉,再將非』@'的一串內容送到buf中   sscanf(「iios/12ddwdff@122」, 「%[/]/%[@]", buf);

printf("%s\n", buf);

結果為:12ddwdff  

%[a-z] 表示匹配a到z中任意字元

%[ab』] 匹配a、b、'中一員

%[^a] 匹配非a的任意字元,

「%[^=]」 讀入任意多的字元,直到遇到"="停止

"「表示該輸入項讀入後不賦予任何變數,即跳過該輸入值

//在搜尋sscanf的具體用法時,又發現了strok函式,這裡也寫上

**int in=0;

char buffer=「fred,john,ann」

char *p[3];

char *buff = buffer;

while((p[in]=strtok(buf,」,」))!=null)

如上**,第一次執行strtok需要以目標字串的位址為第一引數(buf=buffer),之後strtok需要以null為第一引數(buf=null)。指標列p,則儲存了分割後的結果,p[0]=「john」,p[1]=「john」,p[2]=「ann」,而buf就變成 fred\0john\0ann\0。

其實可以看到如果不熟練地話還是很容易出錯的,所以這兩個函式得多加練習之後再使用。

利用投影法進行字元分割

目錄 字元分割有很多方法,但並不是每一種方法是萬能的,那麼就需要根據自己的需要來分析。例如 我現在專案的需求是將一串編號給切分開來。查了網上的資料和文獻,大致適合專案的有兩種方法 投影分割法和連通域分割法。當然還有其他的一些改進的演算法,今天就不作深入討論,以後研究了再分享。投影法的原理其實很簡單,...

利用遞迴分割(Split)字串

sqlserver 遞迴工作需要將表裡的某個字段分割之後再插入到另乙個表中,其實資料量不大,直接用游標一行一行的取,再利用迴圈來分割之後再實現資料的插入應該可以直接滿足需求。但是,想到遞迴應該也可以實現需求,而且遞迴也不太熟,所以就以試試的心態來做一下,想不到既然實現了需要的效果。初始化 需要分割的...

C 字串分割

c 中的字元分割是乙個常見的應用,下面是乙個字串分割的 字串分割 vectorsplit string const string str,const string delimiters else pos delim split str.find delimiters res.push back sp...