C語(yǔ)言中字符串處理函數(shù)sscanf的用法
前言:
一直對(duì)于一些日期字符串中數(shù)字的提取比較頭疼,現(xiàn)看到 sscanf 對(duì)于字符串中的內(nèi)容提取較方便,學(xué)習(xí)記錄如下。方便以后查詢。
sscanf()
:將 C 語(yǔ)言字符串中數(shù)據(jù)按 指定的格式 將數(shù)據(jù)存儲(chǔ)在對(duì)應(yīng)的參數(shù)中。
1、函數(shù)格式
// sscanf() 會(huì)從 buffer 里讀進(jìn)數(shù)據(jù),依照 format 的格式將數(shù)據(jù)寫(xiě)入到 argument 里,注意這里的 argument 需要使用地址符號(hào) // 轉(zhuǎn)換格式參考 scanf() 即可 int sscanf(const char *buffer, const char *format, [argument ]... );
2、返回值
成功則返回參數(shù)數(shù)目,失敗則返回-1,錯(cuò)誤原因存于errno中。
說(shuō)明:
3、支持集合操作
-
%[a-z]
表示匹配 a 到 z 中任意字符,貪婪性(盡可能多的匹配); %[aB]
匹配 a、B 中一員,貪婪性;%[^a]
匹配非 a 的任意字符,并且停止讀入,貪婪性;
4、測(cè)試代碼
#include <bits/stdc++.h> using namespace std; int main() { // sscanf() 會(huì)從 buffer 里讀進(jìn)數(shù)據(jù),依照 format 的格式將數(shù)據(jù)寫(xiě)入到 argument 里,注意這里的 argument 需要使用地址符號(hào) // format 格式參考 scanf() 的輸入格式即可 // 1、取需要的字符串 int year,month,day; sscanf("2022.09.21","%d.%d.%d",&year,&month,&day);// 提取年、月、日 printf("%d %d %d\n",year,month,day); //2、 %ns 提取長(zhǎng)度為 n 的字符串 char str1[10]; sscanf("20220901000","%8s",str1);// 提取長(zhǎng)度為 8 的字符串 printf("%s\n",str1); // 3、將數(shù)字表示的字符串轉(zhuǎn)換為整型變量 int num; sscanf("123456","%d",&num); printf("%d\n",num); // 4、取到指定字符為止的字符串 char str2[10]; sscanf("test 01","%[^ ]",str2);// 取遇到空格為止的字符串 puts(str2); char str3[10]; sscanf("test/01","%[^/]",str3);// 取遇到'/'為止的字符串 puts(str3); // 5、取僅包含指定字符集的字符串 char str4[20]; sscanf("123456testSIX","%[1-9a-z]",str4);// 只取數(shù)字和小寫(xiě)字母 puts(str4); // 6、跳過(guò)不想要的數(shù)據(jù) char str5[20]; // %s 讀取時(shí)是以空格和換行作為結(jié)束標(biāo)志的! sscanf("test TEST","%*s%s",str5);// 使用 %*s 來(lái)跳過(guò)前一個(gè)字符串 puts(str5); // 給定一個(gè)字符串test/unique_11@qq.com,獲取 / 和 @ 之間的字符串 char str6[20]; sscanf("test/unique_11@qq.com","%*[^/]/%[^@]",str6);// 先把 test/ 過(guò)濾掉,再將非'@'的一串內(nèi)容送到 str6 中 puts(str6); char buf[30]; sscanf("123456abcdedfBCDEF","%[1-9A-Z]",buf);// 遇到不是1-9或者A-Z的字符時(shí),即遇到小寫(xiě)字母時(shí),就已經(jīng)結(jié)束 printf("%s\n",buf); return 0; }
測(cè)試結(jié)果:
2022 9 21
20220901
123456
test
test
123456test
TEST
unique_11
123456
5、參考文章
到此這篇關(guān)于C語(yǔ)言中字符串處理函數(shù)sscanf的用法的文章就介紹到這了,更多相關(guān)C語(yǔ)言 sscanf內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用c++和easyx圖形庫(kù)做一個(gè)低配版掃雷游戲
這篇文章主要介紹了用c++和easyx圖形庫(kù)做一個(gè)低配版掃雷游戲,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01atoi和itoa函數(shù)的實(shí)現(xiàn)方法
本文介紹了,atoi和itoa函數(shù)的實(shí)現(xiàn)方法,需要的朋友可以參考一下2013-03-03C語(yǔ)言簡(jiǎn)明介紹常見(jiàn)關(guān)鍵字的用法
關(guān)鍵字是C語(yǔ)言非常重要的一部分,熟練的掌握和使用關(guān)鍵字有助于我們更加熟悉了解C語(yǔ)言,同時(shí)C語(yǔ)言的關(guān)鍵字也是面試筆試中??嫉膬?nèi)容。C語(yǔ)言的關(guān)鍵字共有32個(gè),但并不是每個(gè)關(guān)鍵字都有坑,本篇文章將通過(guò)理論聯(lián)系實(shí)際的方式為大家講解C語(yǔ)言中易混易錯(cuò)以及??嫉囊恍╆P(guān)鍵字2022-06-06如何使用C++結(jié)合OpenCV進(jìn)行圖像處理與分類
在計(jì)算機(jī)視覺(jué)領(lǐng)域,OpenCV與C++結(jié)合能高效處理和分類圖像,C++的高執(zhí)行效率適合大規(guī)模數(shù)據(jù)處理,OpenCV提供豐富的功能,如圖像預(yù)處理和機(jī)器學(xué)習(xí)算法,安裝OpenCV需要配置環(huán)境和添加庫(kù)文件,本文詳細(xì)介紹了使用C++和OpenCV進(jìn)行圖像分類的過(guò)程,包括使用SVM和深度學(xué)習(xí)模型2024-09-09