C語言中字符串處理函數(shù)sscanf的用法
前言:
一直對于一些日期字符串中數(shù)字的提取比較頭疼,現(xiàn)看到 sscanf 對于字符串中的內(nèi)容提取較方便,學(xué)習(xí)記錄如下。方便以后查詢。
sscanf() :將 C 語言字符串中數(shù)據(jù)按 指定的格式 將數(shù)據(jù)存儲在對應(yīng)的參數(shù)中。
1、函數(shù)格式
// sscanf() 會從 buffer 里讀進(jìn)數(shù)據(jù),依照 format 的格式將數(shù)據(jù)寫入到 argument 里,注意這里的 argument 需要使用地址符號 // 轉(zhuǎn)換格式參考 scanf() 即可 int sscanf(const char *buffer, const char *format, [argument ]... );
2、返回值
成功則返回參數(shù)數(shù)目,失敗則返回-1,錯誤原因存于errno中。

說明:

3、支持集合操作
-
%[a-z]表示匹配 a 到 z 中任意字符,貪婪性(盡可能多的匹配); %[aB]匹配 a、B 中一員,貪婪性;%[^a]匹配非 a 的任意字符,并且停止讀入,貪婪性;
4、測試代碼
#include <bits/stdc++.h>
using namespace std;
int main()
{
// sscanf() 會從 buffer 里讀進(jìn)數(shù)據(jù),依照 format 的格式將數(shù)據(jù)寫入到 argument 里,注意這里的 argument 需要使用地址符號
// 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 提取長度為 n 的字符串
char str1[10];
sscanf("20220901000","%8s",str1);// 提取長度為 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ù)字和小寫字母
puts(str4);
// 6、跳過不想要的數(shù)據(jù)
char str5[20];
// %s 讀取時是以空格和換行作為結(jié)束標(biāo)志的!
sscanf("test TEST","%*s%s",str5);// 使用 %*s 來跳過前一個字符串
puts(str5);
// 給定一個字符串test/unique_11@qq.com,獲取 / 和 @ 之間的字符串
char str6[20];
sscanf("test/unique_11@qq.com","%*[^/]/%[^@]",str6);// 先把 test/ 過濾掉,再將非'@'的一串內(nèi)容送到 str6 中
puts(str6);
char buf[30];
sscanf("123456abcdedfBCDEF","%[1-9A-Z]",buf);// 遇到不是1-9或者A-Z的字符時,即遇到小寫字母時,就已經(jīng)結(jié)束
printf("%s\n",buf);
return 0;
}測試結(jié)果:
2022 9 21
20220901
123456
test
test
123456test
TEST
unique_11
123456
5、參考文章
到此這篇關(guān)于C語言中字符串處理函數(shù)sscanf的用法的文章就介紹到這了,更多相關(guān)C語言 sscanf內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何使用C++結(jié)合OpenCV進(jìn)行圖像處理與分類
在計算機(jī)視覺領(lǐng)域,OpenCV與C++結(jié)合能高效處理和分類圖像,C++的高執(zhí)行效率適合大規(guī)模數(shù)據(jù)處理,OpenCV提供豐富的功能,如圖像預(yù)處理和機(jī)器學(xué)習(xí)算法,安裝OpenCV需要配置環(huán)境和添加庫文件,本文詳細(xì)介紹了使用C++和OpenCV進(jìn)行圖像分類的過程,包括使用SVM和深度學(xué)習(xí)模型2024-09-09

