怎樣將數(shù)字轉(zhuǎn)換為字符串?
C語言提供了幾個(gè)標(biāo)準(zhǔn)庫函數(shù),,可以將任意類型(整型、長整型,、浮點(diǎn)型等)的數(shù)字轉(zhuǎn)換為字符串,。以下是用itoa()函數(shù)將整數(shù)轉(zhuǎn)換為字符串的一個(gè)例子:
itoa()函數(shù)有3個(gè)參數(shù):第一個(gè)參數(shù)是要轉(zhuǎn)換的數(shù)字,,第二個(gè)參數(shù)是要寫入轉(zhuǎn)換結(jié)果的目標(biāo)字符串,,第三個(gè)參數(shù)是轉(zhuǎn)移數(shù)字時(shí)所用的基數(shù)。在上例中,,轉(zhuǎn)換基數(shù)為10,。 請注意,上述函數(shù)與ANSI標(biāo)準(zhǔn)是不兼容的,。能將整數(shù)轉(zhuǎn)換為字符串而且與ANSI標(biāo)準(zhǔn)兼容的方法是使用sprintf()函數(shù),,請看下例:
char *gcvt( double number, size_t ndigits, char *buf ); gcvt()用來將參數(shù)number轉(zhuǎn)換成ASCII碼字符串,,參數(shù)ndigits表示顯示的位數(shù),。gcvt()與ecvt()和fcvt()不同的地方在于,gcvt()所轉(zhuǎn)換后的字符串包含小數(shù)點(diǎn)或正負(fù)符號(hào),。若轉(zhuǎn)換成功,,轉(zhuǎn)換后的字符串會(huì)放在參數(shù)buf指針?biāo)傅目臻g,。該函數(shù)返回一字符串指針,,此地址即為buf指針。 ecvt() :將雙精度浮點(diǎn)型值轉(zhuǎn)換為字符串,,轉(zhuǎn)換結(jié)果中不包含十進(jìn)制小數(shù)點(diǎn) fcvt(): 以指定位數(shù)為轉(zhuǎn)換精度,,其余同ecvt()
怎樣將字符串轉(zhuǎn)換為數(shù)字?
下列函數(shù)可以將字符串轉(zhuǎn)換為數(shù)字: atof(將字符串轉(zhuǎn)換成浮點(diǎn)型數(shù)) double atof( const char *nptr ); atof()會(huì)掃描參數(shù)nptr字符串,跳過前面的空格字符,,直到遇上數(shù)字或正負(fù)符號(hào)才開始做轉(zhuǎn)換,,而再遇到非數(shù)字或字符串結(jié)束時(shí)(‘\0‘)才結(jié)束轉(zhuǎn)換,并將結(jié)果返回,。參數(shù)nptr字符串可包含正負(fù)號(hào),、小數(shù)點(diǎn)或E(e)來表示指數(shù)部分,如123.456或123e-2,。該函數(shù)返回轉(zhuǎn)換后的浮點(diǎn)型數(shù),。atof()與使用strtod(nptr,(char**)NULL)結(jié)果相同。 atoi(將字符串轉(zhuǎn)換成整型數(shù)) int atoi(const char *nptr); atoi()會(huì)掃描參數(shù)nptr字符串,,跳過前面的空格字符,,直到遇上數(shù)字或正負(fù)符號(hào)才開始做轉(zhuǎn)換,而再遇到非數(shù)字或字符串結(jié)束時(shí)(‘\0‘)才結(jié)束轉(zhuǎn)換,,并將結(jié)果返回,。該函數(shù)返回轉(zhuǎn)換后的整型數(shù)。atoi()與使用strtol(nptr,,(char**)NULL,,10),;結(jié)果相同。 atol(將字符串轉(zhuǎn)換成長整型數(shù)) long atol(const char *nptr); atol()會(huì)掃描參數(shù)nptr字符串,,跳過前面的空格字符,,直到遇上數(shù)字或正負(fù)符號(hào)才開始做轉(zhuǎn)換,而再遇到非數(shù)字或字符串結(jié)束時(shí)(‘\0‘)才結(jié)束轉(zhuǎn)換,,并將結(jié)果返回,。該函數(shù)返回轉(zhuǎn)換后的長整型數(shù)。atol()與使用strtol(nptr,(char**)NULL,10),;結(jié)果相同,。
strtod(將字符串轉(zhuǎn)換成浮點(diǎn)數(shù)) double strtod( const char *nptr, char **endptr ); strtod()會(huì)掃描參數(shù)nptr字符串,跳過前面的空格字符,,直到遇上數(shù)字或正負(fù)符號(hào)才開始做轉(zhuǎn)換,,到出現(xiàn)非數(shù)字或字符串結(jié)束時(shí)(‘\0‘)才結(jié)束轉(zhuǎn)換,并將結(jié)果返回,。若endptr不為NULL,,則會(huì)將遇到不合條件而終止的nptr中的字符指針由endptr傳回。參數(shù)nptr字符串可包含正負(fù)號(hào),、小數(shù)點(diǎn)或E(e)來表示指數(shù)部分,。如123.456或123e-2。該函數(shù)返回轉(zhuǎn)換后的浮點(diǎn)型數(shù),。 strtol(將字符串轉(zhuǎn)換成長整型數(shù)) long int strtol( const char *nptr, char **endptr, int base ); strtol()會(huì)將參數(shù)nptr字符串根據(jù)參數(shù)base來轉(zhuǎn)換成長整型數(shù),。參數(shù)base范圍從2至36,或0,。參數(shù)base代表采用的進(jìn)制方式,,如base值為10則采用10進(jìn)制,若base值為16則采用16進(jìn)制等,。當(dāng)base值為0時(shí)則是采用10進(jìn)制做轉(zhuǎn)換,,但遇到如‘0x‘前置字符則會(huì)使用16進(jìn)制做轉(zhuǎn)換。一開始strtol()會(huì)掃描參數(shù)nptr字符串,,跳過前面的空格字符,,直到遇上數(shù)字或正負(fù)符號(hào)才開始做轉(zhuǎn)換,再遇到非數(shù)字或字符串結(jié)束時(shí)(‘\0‘)結(jié)束轉(zhuǎn)換,,并將結(jié)果返回,。若參數(shù)endptr不為NULL,則會(huì)將遇到不合條件而終止的nptr中的字符指針由endptr返回,。該函數(shù)返回轉(zhuǎn)換后的長整型數(shù),,否則返回ERANGE并將錯(cuò)誤代碼存入errno中(ERANGE指定的轉(zhuǎn)換字符串超出合法范圍) strtoul(將字符串轉(zhuǎn)換成無符號(hào)長整型數(shù)) unsigned long int strtoul(const char *nptr,char **endptr,int base); strtoul()會(huì)將參數(shù)nptr字符串根據(jù)參數(shù)base來轉(zhuǎn)換成無符號(hào)的長整型數(shù)。參數(shù)base范圍從2至36,或0,。參數(shù)base代表采用的進(jìn)制方式,,如base值為10則采用10進(jìn)制,若base值為16則采用16進(jìn)制數(shù)等,。當(dāng)base值為0時(shí)則是采用10進(jìn)制做轉(zhuǎn)換,,但遇到如‘0x‘前置字符則會(huì)使用16進(jìn)制做轉(zhuǎn)換。一開始strtoul()會(huì)掃描參數(shù)nptr字符串,,跳過前面的空格字符串,,直到遇上數(shù)字或正負(fù)符號(hào)才開始做轉(zhuǎn)換,再遇到非數(shù)字或字符串結(jié)束時(shí)(‘\0‘)結(jié)束轉(zhuǎn)換,,并將結(jié)果返回,。若參數(shù)endptr不為NULL,則會(huì)將遇到不合條件而終止的nptr中的字符指針由endptr返回,。該函數(shù)返回轉(zhuǎn)換后的長整型數(shù),,否則返回ERANGE并將錯(cuò)誤代碼存入errno中(ERANGE指定的轉(zhuǎn)換字符串超出合法范圍)
|
|