最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言中的sscanf()函數(shù)使用

 更新時(shí)間:2023年05月17日 16:05:17   作者:faihung  
本文主要介紹了C語(yǔ)言中的sscanf()函數(shù)使用,sscanf通常被用來(lái)解析并轉(zhuǎn)換字符串,可以實(shí)現(xiàn)很強(qiáng)大的字符串解析功能,下面就一起來(lái)了解一下

一、描述

sscanf通常被用來(lái)解析并轉(zhuǎn)換字符串,其格式定義靈活多變,可以實(shí)現(xiàn)很強(qiáng)大的字符串解析功能。

sscanf的原型

#include <stdio.h>
int sscanf(const char *str, const char *format, ...);

str:待解析的字符串;

format:字符串格式描述;

其后是一序列數(shù)目不定的指針參數(shù),存儲(chǔ)解析后的數(shù)據(jù).

二、示例用法

1. sscanf的基本用法

整形數(shù)轉(zhuǎn)換

int year, month, day;
int converted = sscanf("20191103", "%04d%02d%02d", &year, &month, &day);
printf("converted=%d, year=%d, month=%d, day=%d/n", converted, year, month, day);

輸出結(jié)果:

converted=3, year=2019, month=11, day=03

"%04d%02d%02d"是用來(lái)解析字符串的格式,%表示格式轉(zhuǎn)換的開始,d表示轉(zhuǎn)換為一個(gè)整數(shù),04作為d的修飾,表示這是一個(gè)長(zhǎng)度為4位的整數(shù),不足4位時(shí)以0補(bǔ)齊。

例子返回結(jié)果等于3,表示有3個(gè)數(shù)據(jù)成功轉(zhuǎn)換,轉(zhuǎn)換成功數(shù)目同時(shí)取決于被解析的字符串以及其轉(zhuǎn)換格式,如果我們把例子中的格式改為"%04d%02d",那么sscanf將只返回2,day的數(shù)值不會(huì)被sscanf更改。

浮點(diǎn)數(shù)轉(zhuǎn)換

double longitude, latitude;
int converted = sscanf("113.123456789 31.123456789", "%lf %lf", &longitude, &latitude);
printf("converted=%d, longitude=%.9lf, latitude=%lf/n", converted, longitude, latitude);

輸出結(jié)果:

converted=2, longitude=113.123456789, latitude=31.123457

sscanf的格式字符串中,f表示這是一個(gè)浮點(diǎn)數(shù),其修飾詞l表示這是一個(gè)double的浮點(diǎn)數(shù)。

2. sscanf的高級(jí)用法

數(shù)字+字符串

char str[32] = "";
sscanf("123456abcdedf", "%31[0-9]", str);
printf("str=%s/n", str);

輸出結(jié)果:

str=123456

上面的格式中,[0-9]表示這是一個(gè)僅包含0-9這幾個(gè)字符的字符串,前面使用數(shù)字31修飾詞表示這個(gè)字符串緩沖區(qū)的最大長(zhǎng)度(這也是sscanf最為人詬病的地方,很容易出現(xiàn)緩沖區(qū)溢出錯(cuò)誤,實(shí)際上sscanf是可以避免出現(xiàn)緩沖區(qū)溢出的,只要在書寫任何字符串解析的格式時(shí),注意加上其緩沖區(qū)尺寸的限制)。

char str[32] = "";
sscanf("123456abcdedf", "%31[0-9a-z]", str);
printf("str=%s/n", str);

輸出結(jié)果:

str=123456abcdedf

在格式[]中增加了a-z的描述。

使用^示例:

char str[32] = "";
sscanf("123456abcdedf", "%31[^a-z]", str);
printf("str=%s/n", str);

輸出結(jié)果:

str=123456

在[]中增加表示相反的意思,上面的[a-z]表示一個(gè)不包含任何a-z之間的字符串。

使用*的例子:

char str[32] = "";
int ret = sscanf("123456abcdedf", "%*[0-9]%31[a-z]", str);
printf("ret=%d, str=%s/n",ret, str);

輸出結(jié)果:

ret=1, str=abcdedf

加上*修飾表示一個(gè)被忽略的數(shù)據(jù),同時(shí)也不需要為它準(zhǔn)備空間存放解析結(jié)果。如上面的例子中,我們就只使用了str一個(gè)參數(shù)存放%31[a-z]的解析結(jié)果,而sscanf也只返回1,表示只解析了一個(gè)數(shù)據(jù)。

掌握了[], ^, *如何使用后,我們會(huì)發(fā)現(xiàn)sscanf原來(lái)是一個(gè)如此強(qiáng)大的工具,很多我們?cè)日J(rèn)為必須使用正則表達(dá)式的地方,很可能使用sscanf就可以實(shí)現(xiàn)。

舉例:

1. 取指定長(zhǎng)度的字符串

#include<stdio.h>
#include<string.h>
int main()
{
    char str[100];
    sscanf("12345","%4s",str);
    printf("%s\n",str);
    return 0;
}

2. 格式化時(shí)間

#include<stdio.h>
#include<string.h>
int main()
{
    int year, month, day, hour, minute, second;
    sscanf("2013/02/13 14:55:34","%d/%d/%d %d:%d:%d",&year, &month, &day, &hour, &minute, &second);
    printf("time=%d-%d-%d %d:%d:%d\n", year, month, day, hour, minute, second);
    return 0;
}

 3. 讀入字符串

#include<stdio.h>
#include<string.h>
int main()
{
?? ?char str[100];
?? ?sscanf("12345","%s",str);
?? ?printf("%s\n",str);
?? ?return 0;
}
#include<stdio.h>
#include<string.h>
int main()
{
??? ?char str1[100], str2[100], str3[100];
? ?? ?gets(str1);
? ?? ?sscanf(str1,"%s%s",str2,str3);
? ?? ?printf("%s %s\n",str2,str3);
?? ?return 0;
}

4. %*d和%*s加了(*)表示跳過(guò)此數(shù)據(jù)不讀入(也就是不把此數(shù)據(jù)讀入?yún)?shù)中)

#include<stdio.h>
#include<string.h>
int main()
{
    char str[100];
    sscanf("1234abcd","%*d%s",str);
    printf("%s\n",str);
    return 0;
}

5.  取到指定字符為止的字符串。如例子所示,遇到‘+’為止的字符串。

#include<stdio.h>
#include<string.h>
int main()
{
    char str[100];
    sscanf("1234+abc","%[^+]",str);
    printf("%s\n",str);
    return 0;
}

遇到空格為止的字符串

#include<stdio.h>
#include<string.h>
int main()
{
    char str[100];
    sscanf("1234+abc1234","%[^]",str);
    printf("str=%s\n",str);
    return 0;
}

 6. 取到指定字符集為止的字符串。如遇到小寫字母為止的字符串。

#include<stdio.h>
#include<string.h>
int main()
{
    char str[100];
    sscanf("1234+abc1234","%[^a-z]",str);
    printf("%s\n",str);
    return 0;
}

7. 取僅包含指定字符集的字符串。(取僅包含數(shù)字和小寫字母的字符串,是取得連續(xù)的字符串)。

#include<stdio.h>
#include<string.h>
int main()
{
    char str[100];
    sscanf("123456abcdefBFRGTY7890","%[1-9a-z]",str);
    printf("%s\n",str);
    return 0;
}

到此這篇關(guān)于C語(yǔ)言中的sscanf()函數(shù)使用的文章就介紹到這了,更多相關(guān)C語(yǔ)言 sscanf()內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Lua和C/C++互相調(diào)用實(shí)例分析

    Lua和C/C++互相調(diào)用實(shí)例分析

    今天小編就為大家分享一篇關(guān)于Lua和C/C++互相調(diào)用實(shí)例分析,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • C++函數(shù)返回值缺失問(wèn)題及解決

    C++函數(shù)返回值缺失問(wèn)題及解決

    C++函數(shù)返回值缺失會(huì)導(dǎo)致未定義行為,引發(fā)邏輯錯(cuò)誤、崩潰等風(fēng)險(xiǎn),編譯器通常僅警告而非強(qiáng)制報(bào)錯(cuò),但可通過(guò)編譯選項(xiàng)將其升級(jí)為錯(cuò)誤,解決方案包括顯式覆蓋所有代碼路徑、啟用嚴(yán)格檢查、簡(jiǎn)化控制流,并注意main函數(shù)的隱式返回0例外
    2025-09-09
  • 深入探討C++父類子類中虛函數(shù)的應(yīng)用

    深入探討C++父類子類中虛函數(shù)的應(yīng)用

    本篇文章是對(duì)C++父類子類中虛函數(shù)的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語(yǔ)言結(jié)構(gòu)數(shù)組實(shí)現(xiàn)貪吃蛇小游戲

    C語(yǔ)言結(jié)構(gòu)數(shù)組實(shí)現(xiàn)貪吃蛇小游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言結(jié)構(gòu)數(shù)組實(shí)現(xiàn)貪吃蛇小游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • C語(yǔ)言結(jié)構(gòu)體內(nèi)存的對(duì)齊知識(shí)詳解

    C語(yǔ)言結(jié)構(gòu)體內(nèi)存的對(duì)齊知識(shí)詳解

    這篇文章主要介紹了C語(yǔ)言結(jié)構(gòu)體內(nèi)存的對(duì)齊的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • C++中sting類的簡(jiǎn)單實(shí)現(xiàn)方法

    C++中sting類的簡(jiǎn)單實(shí)現(xiàn)方法

    這篇文章主要介紹了C++中sting類的簡(jiǎn)單實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下
    2016-08-08
  • 詳解C/C++高精度(加減乘除)算法中的壓位優(yōu)化

    詳解C/C++高精度(加減乘除)算法中的壓位優(yōu)化

    在高精度計(jì)算中數(shù)組的每個(gè)元素存儲(chǔ)一位10進(jìn)制的數(shù)字,這樣的存儲(chǔ)方式并不是最優(yōu)的,32位的整型其實(shí)至少可以存儲(chǔ)9位高精度數(shù)字,數(shù)組元素存儲(chǔ)更多的位數(shù)就是壓位優(yōu)化。本文將展示壓位優(yōu)化的原理以及壓9位的實(shí)現(xiàn)和性能對(duì)比,需要的可以參考一下
    2023-01-01
  • 模擬鼠標(biāo)事件的實(shí)現(xiàn)思路及代碼

    模擬鼠標(biāo)事件的實(shí)現(xiàn)思路及代碼

    這篇文章主要介紹了模擬鼠標(biāo)事件的實(shí)現(xiàn)思路及代碼,有需要的朋友可以參考一下
    2013-12-12
  • 淺談C++中virtual的三種用法

    淺談C++中virtual的三種用法

    這篇文章主要介紹了淺談C++中virtual的三種用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • C++實(shí)現(xiàn)兩個(gè)日期間差多少天的解決方法

    C++實(shí)現(xiàn)兩個(gè)日期間差多少天的解決方法

    本篇文章用實(shí)例說(shuō)明,在C++中實(shí)現(xiàn)兩個(gè)日期間差多少天的方法。需要的朋友參考下
    2013-05-05

最新評(píng)論

马尔康县| 多伦县| 麟游县| 洛隆县| 阜新市| 太仆寺旗| 中牟县| 平邑县| 疏附县| 宝鸡市| 乳源| 新密市| 甘孜县| 高平市| 荣成市| 平谷区| 新丰县| 孝昌县| 渑池县| 长宁县| 高雄市| 安泽县| 库伦旗| 延川县| 新平| 镇安县| 介休市| 墨玉县| 宜昌市| 黄浦区| 花莲市| 泌阳县| 阿克| 福贡县| 塔城市| 高州市| 乐安县| 长白| 丽水市| 鸡东县| 江陵县|