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...