欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、描述

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

sscanf的原型

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

str:待解析的字符串;

format:字符串格式描述;

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

二、示例用法

1. sscanf的基本用法

整形數(shù)轉換

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);

輸出結果:

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

"%04d%02d%02d"是用來解析字符串的格式,%表示格式轉換的開始,d表示轉換為一個整數(shù),04作為d的修飾,表示這是一個長度為4位的整數(shù),不足4位時以0補齊。

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

浮點數(shù)轉換

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);

輸出結果:

converted=2, longitude=113.123456789, latitude=31.123457

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

2. sscanf的高級用法

數(shù)字+字符串

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

輸出結果:

str=123456

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

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

輸出結果:

str=123456abcdedf

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

使用^示例:

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

輸出結果:

str=123456

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

使用*的例子:

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

輸出結果:

ret=1, str=abcdedf

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

掌握了[], ^, *如何使用后,我們會發(fā)現(xiàn)sscanf原來是一個如此強大的工具,很多我們原先認為必須使用正則表達式的地方,很可能使用sscanf就可以實現(xiàn)。

舉例:

1. 取指定長度的字符串

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

2. 格式化時間

#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加了(*)表示跳過此數(shù)據不讀入(也就是不把此數(shù)據讀入參數(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;
}

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

相關文章

  • 基于Qt實現(xiàn)視頻播放器的制作

    基于Qt實現(xiàn)視頻播放器的制作

    本文主要為大家介紹了如何利用Qt中的qMediaPlayer和qvideowidget實現(xiàn)視頻文件(avi,mp4….)的播放,并且提供進度顯示,還可以通過拖動進度條來變換播放位置,感興趣的可以嘗試一下
    2022-12-12
  • 詳解C語言結構體的定義和使用

    詳解C語言結構體的定義和使用

    這篇文章主要為大家介紹了C語言結構體的定義和使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • Qt中QTextEdit和QPlainTextEdit控件的實現(xiàn)

    Qt中QTextEdit和QPlainTextEdit控件的實現(xiàn)

    本文主要介紹了Qt中QTextEdit和QPlainTextEdit控件的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-04-04
  • C語言結構體數(shù)組同時賦值的另類用法

    C語言結構體數(shù)組同時賦值的另類用法

    今天小編就為大家分享一篇關于C語言結構體數(shù)組同時賦值的另類用法,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • c語言數(shù)據結構與算法之順序表的定義實現(xiàn)詳解

    c語言數(shù)據結構與算法之順序表的定義實現(xiàn)詳解

    這篇文章主要介紹了c語言數(shù)據結構與算法之順序表的定義實現(xiàn)詳解,用順序存儲的方式實現(xiàn)線性表順序存儲,把邏輯上相鄰的元素存儲在物理位置上也相鄰的存儲單元中,元素之間的關系由存儲單元的鄰接關系來體現(xiàn),需要的朋友可以參考下
    2023-08-08
  • Python HTTP服務搭建顯示本地文件

    Python HTTP服務搭建顯示本地文件

    這篇文章主要介紹了Python HTTP服務搭建顯示本地文件的相關資料,需要的朋友可以參考下
    2017-02-02
  • C++ Primer 多維數(shù)組的使用

    C++ Primer 多維數(shù)組的使用

    本文主要介紹了多維數(shù)組在C++語言中的定義、初始化、下標引用以及使用范圍for語句處理多維數(shù)組的方法,具有一定的參考價值,感興趣的可以了解一下
    2025-02-02
  • C++高并發(fā)內存池的實現(xiàn)

    C++高并發(fā)內存池的實現(xiàn)

    本文主要介紹了C++高并發(fā)內存池的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • c++數(shù)組排序的5種方法實例代碼

    c++數(shù)組排序的5種方法實例代碼

    大家還在為大小排序而煩惱嗎?今天讓我我大家解決這個問題吧,下面這篇文章主要給大家介紹了關于c++數(shù)組排序的5種方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • C++實現(xiàn)LeetCode(31.下一個排列)

    C++實現(xiàn)LeetCode(31.下一個排列)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(31.下一個排列),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07

最新評論