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

利用C語(yǔ)言實(shí)現(xiàn)將格式化數(shù)據(jù)和字符串相互轉(zhuǎn)換

 更新時(shí)間:2023年03月29日 15:42:48   作者:努力學(xué)習(xí)游泳的魚(yú)  
這篇文章主要為大家詳細(xì)介紹了2個(gè)函數(shù),分別是sprintf和sscanf,可以用來(lái)實(shí)現(xiàn)將格式化數(shù)據(jù)和字符串相互轉(zhuǎn)換,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

今天重點(diǎn)介紹2個(gè)函數(shù),分別是sprintf和sscanf,用來(lái)將格式化數(shù)據(jù)和字符串相互轉(zhuǎn)換。它們的作用分別是:

1.sprintf函數(shù)用于將格式化數(shù)據(jù)轉(zhuǎn)換成字符串。

3.sscanf函數(shù)用于將字符串轉(zhuǎn)換成格式化數(shù)據(jù)。

接下來(lái)是第一個(gè)大問(wèn)題:我怎么記憶呢?這好容易記反呀!

別擔(dān)心,我來(lái)教你。你也許不知道sprintf和sscanf,但你肯定知道printf和scanf。

printf負(fù)責(zé)把格式化數(shù)據(jù)輸出到屏幕上。sprintf和printf類(lèi)似,只不過(guò)不是輸出到屏幕上,而是輸出到一個(gè)字符串中。把格式化數(shù)據(jù)輸出到字符串中,不就是把格式化數(shù)據(jù)轉(zhuǎn)換成字符串嘛。

scanf負(fù)責(zé)從鍵盤(pán)中輸入格式化數(shù)據(jù)。同理,sscanf和scanf類(lèi)似,只不過(guò)不是從鍵盤(pán)中輸入數(shù)據(jù),而是從一個(gè)字符串中輸入數(shù)據(jù),也就是把字符串轉(zhuǎn)換成格式化數(shù)據(jù)。

接下來(lái)講解如何使用這兩個(gè)函數(shù)。

1.sprintf

假設(shè)有這么一個(gè)結(jié)構(gòu)體:

struct S
{
    int i;
    double d;
    char arr[20];
};

我們創(chuàng)建了一個(gè)結(jié)構(gòu)體變量:

struct S s = {10, 3.14, "abcdef"};

此時(shí),內(nèi)存中就有了一份格式化數(shù)據(jù)。我們?nèi)绾伟堰@個(gè)格式化數(shù)據(jù)轉(zhuǎn)換成字符串呢?

首先得有字符串存儲(chǔ)的位置,C語(yǔ)言用字符數(shù)組來(lái)存儲(chǔ)字符串:

char str[100] = {0};

接下來(lái)我們要干的事情,就是把s結(jié)構(gòu)體中的數(shù)據(jù)轉(zhuǎn)換成字符串,存儲(chǔ)到str中,這就需要使用sprintf。

sprintf的聲明如下:

int sprintf ( char * str, const char * format, ... );

其中str就是轉(zhuǎn)換出來(lái)的字符串要存儲(chǔ)到哪(一個(gè)char*的指針),后面的參數(shù)就跟printf是一樣的了。在上面的例子中,應(yīng)該這么使用:

sprintf(str, "%d %lf %s\n", s.i, s.d, s.arr);

如果你還是不理解,可以這么想:下面的代碼是什么意思?

printf("%d %lf %s\n", s.i, s.d, s.arr);

就是把s中的內(nèi)容打印到屏幕上嘛。那如果不是打印到屏幕上,而是“打印”到字符串中,就是sprintf的作用了。

如果你不相信,可以把str中的內(nèi)容打印出來(lái):

printf("%s\n", str);

輸出結(jié)果如下:

這說(shuō)明轉(zhuǎn)換成功了。

2.sscanf

假設(shè)我們已經(jīng)有一個(gè)字符串了:

char str[] = "10 3.140000 abcdef\n";

其實(shí)這個(gè)字符串和上面的例子中轉(zhuǎn)換出來(lái)的字符串是一樣的。

然后創(chuàng)建一個(gè)結(jié)構(gòu)體:

struct S s = {0};

我們?nèi)绾伟堰@個(gè)字符串重新轉(zhuǎn)換成結(jié)構(gòu)體s呢?這就需要用到sscanf函數(shù),聲明如下:

int sscanf ( const char * s, const char * format, ...);

第一個(gè)參數(shù)就是你要轉(zhuǎn)換的字符串,后面的參數(shù)和scanf一樣。

這次,我換一種講述方式,方便大家更好的理解。首先,假設(shè)我要你使用scanf函數(shù)來(lái)輸入數(shù)據(jù)到結(jié)構(gòu)體s中,你會(huì)怎么寫(xiě)?

scanf("%d %lf %s", &s.i, &s.d, s.arr);

注意,數(shù)組名本身就是地址,所以不需要取地址(&)。

scanf函數(shù)可以從鍵盤(pán)輸入數(shù)據(jù)到結(jié)構(gòu)體中去,那如果不從鍵盤(pán)中輸入,而是從字符串輸入呢?只需要使用sscanf,所有參數(shù)前面加上個(gè)str就行了。

sscanf(str, "%d %lf %s", &s.i, &s.d, &s.arr);

大功告成。你還可以把結(jié)構(gòu)體中的數(shù)據(jù)打印出來(lái):

printf("%d %lf %s\n", s.i, s.d, s.arr);

輸出結(jié)果和上面講解sprintf函數(shù)時(shí)舉的例子的輸出是一樣的。

總結(jié)

1.sprintf和sscanf負(fù)責(zé)將字符串和格式化數(shù)據(jù)相互轉(zhuǎn)換。

2.sprintf相當(dāng)于,本來(lái)是printf把格式化數(shù)據(jù)輸出到屏幕上,現(xiàn)在是輸出到一個(gè)字符串中,也就是把格式化數(shù)據(jù)轉(zhuǎn)換成字符串。

3.sscanf相當(dāng)于,本來(lái)是scanf從鍵盤(pán)中輸入格式化數(shù)據(jù),現(xiàn)在是從一個(gè)字符串中輸入,也就是把字符串轉(zhuǎn)換成格式化數(shù)據(jù)。

4.sprintf和sscanf的參數(shù),與printf和scanf的參數(shù)的區(qū)別是,最前面多了個(gè)char*類(lèi)型的指針,也就是指向字符串的指針。

到此這篇關(guān)于利用C語(yǔ)言實(shí)現(xiàn)將格式化數(shù)據(jù)和字符串相互轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)C語(yǔ)言格式化數(shù)據(jù)與字符串相互轉(zhuǎn)換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解C++構(gòu)造函數(shù)

    詳解C++構(gòu)造函數(shù)

    這篇文章主要為大家介紹了C++構(gòu)造函數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-11-11
  • C++中四種加密算法之DES源代碼

    C++中四種加密算法之DES源代碼

    本篇文章主要介紹了C++中四種加密算法之DES源代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。
    2016-11-11
  • C++中類(lèi)的構(gòu)造函數(shù)初始值列表解讀

    C++中類(lèi)的構(gòu)造函數(shù)初始值列表解讀

    這篇文章主要介紹了C++中類(lèi)的構(gòu)造函數(shù)初始值列表,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 解決了個(gè)困擾了2天的問(wèn)題,定點(diǎn)運(yùn)算問(wèn)題

    解決了個(gè)困擾了2天的問(wèn)題,定點(diǎn)運(yùn)算問(wèn)題

    本文主要講解定點(diǎn)運(yùn)算問(wèn)題,需要的朋友可以參考一下。
    2016-06-06
  • 如何為Qt視圖中的文字實(shí)現(xiàn)彩虹漸變效果

    如何為Qt視圖中的文字實(shí)現(xiàn)彩虹漸變效果

    這篇文章主要給大家介紹了關(guān)于如何為Qt視圖中的文字實(shí)現(xiàn)彩虹漸變效果的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用Qt具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 從零開(kāi)始的Socket編程學(xué)習(xí)

    從零開(kāi)始的Socket編程學(xué)習(xí)

    我們每天打開(kāi)瀏覽器瀏覽網(wǎng)頁(yè)時(shí),瀏覽器的進(jìn)程怎么與web服務(wù)器通信的?QQ進(jìn)程怎么與服務(wù)器或你好友所在的QQ進(jìn)程通信?這些都得靠socket?那什么是socket?socket的類(lèi)型有哪些?還有socket的基本函數(shù),下面小編帶大家了解下
    2019-05-05
  • C++中rapidjson將map轉(zhuǎn)為json的方法

    C++中rapidjson將map轉(zhuǎn)為json的方法

    今天小編就為大家分享一篇關(guān)于C++中rapidjson將map轉(zhuǎn)為json的方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-04-04
  • C++11新特性std::tuple的使用方法

    C++11新特性std::tuple的使用方法

    這篇文章主要介紹了C++11新特性-std::tuple的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • C++內(nèi)存池的簡(jiǎn)單實(shí)現(xiàn)

    C++內(nèi)存池的簡(jiǎn)單實(shí)現(xiàn)

    內(nèi)存池是一種動(dòng)態(tài)內(nèi)存分配與管理技術(shù)。本文主要介紹了C++內(nèi)存池的簡(jiǎn)單實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • C語(yǔ)言實(shí)現(xiàn)掃雷OvO(完整代碼)

    C語(yǔ)言實(shí)現(xiàn)掃雷OvO(完整代碼)

    相信大家都玩過(guò)掃雷游戲,因?yàn)樗?jīng)典了,今天我們用C語(yǔ)言來(lái)模擬實(shí)現(xiàn)掃雷游戲,結(jié)合示例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2022-04-04

最新評(píng)論