假設(shè)我們現(xiàn)在正在開發(fā)一款文檔管理類軟件。其中一項功能就是一次性創(chuàng)建多個名稱連續(xù)的文件夾,如Icon1、 Icon2等等。整個名稱可以分作兩部分,前半部分是常量字符串"Icon",后半部分是編號字符串。在使用循環(huán)語句生成名稱時,編號是數(shù)字,如果能將編號轉(zhuǎn)換為一個字符串,那么我們就可以用strcat函數(shù)將兩部分組合起來,然后使用mkdir創(chuàng)建文件夾即可。因此,現(xiàn)階段問題就變成了如何把數(shù)字轉(zhuǎn)換為對應(yīng)的字符。
原始社會
現(xiàn)在又到了查看ASCII碼表的時候了,通過查表我們可以看到,字符'0',對應(yīng)的ASCII碼是48,也就是說數(shù)值48,轉(zhuǎn)換為char類型就是字符'0',根據(jù)這個簡單的對應(yīng)關(guān)系,我們就可以生成名稱了。
我們輸出編號從0-9的名稱,整體效果還不錯。不過,我想你也看到局限性了,如果要生成編號大于10的名稱,這個程序就像小孩數(shù)指頭做算術(shù)一樣,不夠用了。
二階文明
在這一文明階段的,我們的思考認(rèn)知能力有了巨大的提升,我們希望能根據(jù)指定的一個區(qū)間生成對應(yīng)的名稱,如Icon17到Icon35,同時還希望前導(dǎo)名稱能夠指定,就像是Name999-Name1234一樣。同樣,最關(guān)鍵的問題還是數(shù)值到字符串的轉(zhuǎn)換,因為現(xiàn)在的數(shù)值范圍更大了,需要的處理也就更多了。讓我們嘗試編寫一個函數(shù)去解決這個問題。
注釋中【相當(dāng)于num-=factory】有誤
三階文明:itoa
現(xiàn)在我們進(jìn)化到了三階文明,在這一階段,我們不再需要自己編寫復(fù)雜的數(shù)值轉(zhuǎn)換字符串函數(shù)了。而是使用本階文明提供的函數(shù)來完明,這個函數(shù)就是itoa,它由stdlib.h提供。
原型名:char*itoa( int value, char *string, int radix );
value是被轉(zhuǎn)換的整數(shù),string是轉(zhuǎn)換后儲存的字符數(shù)組,radix是轉(zhuǎn)換進(jìn)制數(shù),如2,8,10,16進(jìn)制。
終極文明
想想看,如果我們僅僅是要輸出符合要求的名稱,那么使用 printf("Icon%d", 83); 之類的語句即可達(dá)到要求。在這一文明階段,C語言運行時庫進(jìn)化出了格式化字符串函數(shù)sprintf。
不同于printf將信息輸出到屏幕(確切的說是標(biāo)準(zhǔn)輸出),sprintf將格式化后的字符串輸出到對應(yīng)的字符數(shù)組,一擊達(dá)到目的,其相應(yīng)的安全版本是sprintf_s。同printf一樣,可以使用格式化控制符,可以幫助我們生成補齊的文件夾名稱。在運行完這個程序后,轉(zhuǎn)到對應(yīng)的工程目錄,你會發(fā)現(xiàn)Icon98 Icon99... 靜靜的躺在那兒。
通過這節(jié)內(nèi)容的學(xué)習(xí),希望能幫助你更深刻的理解ASCII碼表、更好的操作數(shù)組,熟悉C提供的字符串函數(shù)。對于C語言字符串函數(shù),建議你更多的使用其安全版本。最后要說明的是,做為練習(xí),你可以寫一個數(shù)字轉(zhuǎn)換為字符串的函數(shù);做為開發(fā),你可以先去查找語言提供的庫是否包含有你需要的功能,有,就用它!






