怎樣將數字轉換為字符串?
C語(yǔ)言提供了幾個(gè)標準庫函數,可以將任意類(lèi)型(整型、長(cháng)整型、浮點(diǎn)型等)的數字轉換為字符串。以下是用itoa()函數將整數轉換為字符串的一個(gè)例子:
# include <stdio.h>
# include <stdlib.h>
int main ()
{
int num = 435443435;
char str[30];
itoa( num, str, 10 );
printf("The number ‘num‘ is %d and the string ‘str‘ is %s. \n" , num, str );
getchar();
return 0;
}
itoa()函數有3個(gè)參數:第一個(gè)參數是要轉換的數字,第二個(gè)參數是要寫(xiě)入轉換結果的目標字符串,第三個(gè)參數是轉移數字時(shí)所用的基數。在上例中,轉換基數為10。
----------------------------------------------------------
函數名 作 用
----------------------------------------------------------
itoa() 將整型值轉換為字符串
ltoa() 將長(cháng)整型值轉換為字符串
ultoa() 將無(wú)符號長(cháng)整型值轉換為字符串
----------------------------------------------------------
請注意,上述函數與ANSI標準是不兼容的。能將整數轉換為字符串而且與ANSI標準兼容的方法是使用sprintf()函數,請看下例:
#include<stdio.h>
#include <stdlib.h>
int main ()
{
int num = 123456;
char str[50];
sprintf(str, "--%d--" , num);
printf ("The number ‘num‘ is %d and the string ‘str‘ is %s. \n" , num, str);
getchar();
return 0;
}
gcvt(將浮點(diǎn)型數轉換為字符串,取四舍五入)
char *gcvt( double number, size_t ndigits, char *buf );
gcvt()用來(lái)將參數number轉換成ASCII碼字符串,參數ndigits表示顯示的位數。gcvt()與ecvt()和fcvt()不同的地方在于,gcvt()所轉換后的字符串包含小數點(diǎn)或正負符號。若轉換成功,轉換后的字符串會(huì )放在參數buf指針所指的空間。該函數返回一字符串指針,此地址即為buf指針。
ecvt() :將雙精度浮點(diǎn)型值轉換為字符串,轉換結果中不包含十進(jìn)制小數點(diǎn)
fcvt(): 以指定位數為轉換精度,其余同ecvt()
#include <stdio.h>
#include <stdlib.h>
int main()
{
double a = 123.45546;
double b = -1234.56;
char ptr[20] = {0};
gcvt( a, 7, ptr );
printf( "a value = %s\n",ptr );
char *p = gcvt( b, 5, ptr );
printf( "b value = %s\n",p );
}
怎樣將字符串轉換為數字?
下列函數可以將字符串轉換為數字:
------------------------------------------------------------------------
函數名 作 用
------------------------------------------------------------------------
atof() 將字符串轉換為雙精度浮點(diǎn)型值
atoi() 將字符串轉換為整型值
atol() 將字符串轉換為長(cháng)整型值
strtod() 將字符串轉換為雙精度浮點(diǎn)型值,并報告不能被轉換的所有剩余數字
strtol() 將字符串轉換為長(cháng)整值,并報告不能被轉換的所有剩余數字
strtoul() 將字符串轉換為無(wú)符號長(cháng)整型值,并報告不能被轉換的所有剩余數字
------------------------------------------------------------------------
atof(將字符串轉換成浮點(diǎn)型數)
double atof( const char *nptr );
atof()會(huì )掃描參數nptr字符串,跳過(guò)前面的空格字符,直到遇上數字或正負符號才開(kāi)始做轉換,而再遇到非數字或字符串結束時(shí)(‘\0‘)才結束轉換,并將結果返回。參數nptr字符串可包含正負號、小數點(diǎn)或E(e)來(lái)表示指數部分,如123.456或123e-2。該函數返回轉換后的浮點(diǎn)型數。atof()與使用strtod(nptr,(char**)NULL)結果相同。
atoi(將字符串轉換成整型數)
int atoi(const char *nptr);
atoi()會(huì )掃描參數nptr字符串,跳過(guò)前面的空格字符,直到遇上數字或正負符號才開(kāi)始做轉換,而再遇到非數字或字符串結束時(shí)(‘\0‘)才結束轉換,并將結果返回。該函數返回轉換后的整型數。atoi()與使用strtol(nptr,(char**)NULL,10);結果相同。
atol(將字符串轉換成長(cháng)整型數)
long atol(const char *nptr);
atol()會(huì )掃描參數nptr字符串,跳過(guò)前面的空格字符,直到遇上數字或正負符號才開(kāi)始做轉換,而再遇到非數字或字符串結束時(shí)(‘\0‘)才結束轉換,并將結果返回。該函數返回轉換后的長(cháng)整型數。atol()與使用strtol(nptr,(char**)NULL,10);結果相同。
# include <stdio.h>
# include <stdlib.h>
int main ()
{
char *a0 ="-1000";
char *b0 ="456";
int c0 = atoi( a0 )+atoi( b0 );
printf( "atoi: c0 = %d\n", c0 );
char *a1 = "-100.23";
char *b1 = "200e-2";
float c1 = atof( a1 ) + atof( b1 );
printf( "atof: c1 = %f\n", c1 );
char *a2 = "4563453";
char *b2 = "4563431237";
long c2 = atol( a2 ) + atol( b2 );
printf( "atol: c2 = %ld\n", c2 );
}
strtod(將字符串轉換成浮點(diǎn)數)
double strtod( const char *nptr, char **endptr );
strtod()會(huì )掃描參數nptr字符串,跳過(guò)前面的空格字符,直到遇上數字或正負符號才開(kāi)始做轉換,到出現非數字或字符串結束時(shí)(‘\0‘)才結束轉換,并將結果返回。若endptr不為NULL,則會(huì )將遇到不合條件而終止的nptr中的字符指針由endptr傳回。參數nptr字符串可包含正負號、小數點(diǎn)或E(e)來(lái)表示指數部分。如123.456或123e-2。該函數返回轉換后的浮點(diǎn)型數。
strtol(將字符串轉換成長(cháng)整型數)
long int strtol( const char *nptr, char **endptr, int base );
strtol()會(huì )將參數nptr字符串根據參數base來(lái)轉換成長(cháng)整型數。參數base范圍從2至36,或0。參數base代表采用的進(jìn)制方式,如base值為10則采用10進(jìn)制,若base值為16則采用16進(jìn)制等。當base值為0時(shí)則是采用10進(jìn)制做轉換,但遇到如‘0x‘前置字符則會(huì )使用16進(jìn)制做轉換。一開(kāi)始strtol()會(huì )掃描參數nptr字符串,跳過(guò)前面的空格字符,直到遇上數字或正負符號才開(kāi)始做轉換,再遇到非數字或字符串結束時(shí)(‘\0‘)結束轉換,并將結果返回。若參數endptr不為NULL,則會(huì )將遇到不合條件而終止的nptr中的字符指針由endptr返回。該函數返回轉換后的長(cháng)整型數,否則返回ERANGE并將錯誤代碼存入errno中(ERANGE指定的轉換字符串超出合法范圍)
strtoul(將字符串轉換成無(wú)符號長(cháng)整型數)
unsigned long int strtoul(const char *nptr,char **endptr,int base);
strtoul()會(huì )將參數nptr字符串根據參數base來(lái)轉換成無(wú)符號的長(cháng)整型數。參數base范圍從2至36,或0。參數base代表采用的進(jìn)制方式,如base值為10則采用10進(jìn)制,若base值為16則采用16進(jìn)制數等。當base值為0時(shí)則是采用10進(jìn)制做轉換,但遇到如‘0x‘前置字符則會(huì )使用16進(jìn)制做轉換。一開(kāi)始strtoul()會(huì )掃描參數nptr字符串,跳過(guò)前面的空格字符串,直到遇上數字或正負符號才開(kāi)始做轉換,再遇到非數字或字符串結束時(shí)(‘\0‘)結束轉換,并將結果返回。若參數endptr不為NULL,則會(huì )將遇到不合條件而終止的nptr中的字符指針由endptr返回。該函數返回轉換后的長(cháng)整型數,否則返回ERANGE并將錯誤代碼存入errno中(ERANGE指定的轉換字符串超出合法范圍)
# include <stdio.h>
# include <stdlib.h>
int main()
{
char a[]="1000000000abcde";
char b[]="1000000000abcde";
char c[]="ffffOPQRST";
char **p;
printf("a = %d, p = %s\n",strtol(a, p, 10), *p );
printf("b = %d, p = %s\n",strtol(b, p, 2), *p );
printf("c = %d, p = %s\n",strtol(c, p, 16), *p );
}
輸出結果為:
a = 1000000000, p = abcde
b = 512, p = abcde
c = 65535, p = OPQRST