本文實例講述了C語言實現(xiàn)將字符串轉(zhuǎn)換為數(shù)字的方法。分享給大家供大家參考。
1、C語言字符串轉(zhuǎn)數(shù)字
C語言提供了幾個標準庫函數(shù),可以將字符串轉(zhuǎn)換為任意類型(整型、長整型、浮點型等)的數(shù)字。以下是用atoi()函數(shù)將字符串轉(zhuǎn)換為整數(shù)的一個例子:
代碼如下:
# include 《stdio. h》
# include 《stdlib. h》
void main (void) ;
void main (void)
{
int num;
char * str = “100”;
num = atoi(str);
printf(“The string ‘str’ is %s and the number ‘num’ is %d. \n”,str, num);
}
atoi()函數(shù)只有一個參數(shù),即要轉(zhuǎn)換為數(shù)字的字符串。atoi()函數(shù)的返回值就是轉(zhuǎn)換所得的整型值。
下列函數(shù)可以將字符串轉(zhuǎn)換為數(shù)字:
------------------------------------------------------------------------
函數(shù)名 作 用
------------------------------------------------------------------------
atof() 將字符串轉(zhuǎn)換為雙精度浮點型值
atoi() 將字符串轉(zhuǎn)換為整型值
atol() 將字符串轉(zhuǎn)換為長整型值
strtod() 將字符串轉(zhuǎn)換為雙精度浮點型值,并報告不能被轉(zhuǎn)換的所有剩余數(shù)字
strtol() 將字符串轉(zhuǎn)換為長整值,并報告不能被轉(zhuǎn)換的所有剩余數(shù)字
strtoul() 將字符串轉(zhuǎn)換為無符號長整型值,并報告不能被轉(zhuǎn)換的所有剩余數(shù)字
------------------------------------------------------------------------
將字符串轉(zhuǎn)換為數(shù)字時可能會導(dǎo)致溢出,如果你使用的是strtoul()這樣的函數(shù),你就能檢查這種溢出錯誤。請看下例:
代碼如下:
# include 《stdio. h》
# include 《stdlib. h》
# include 《limits. h》
void main(void);
void main (void)
{
char* str = “1234567891011121314151617181920” ;
unsigned long num;
char * leftover;
num = strtoul(str, &leftover, 10);
printf(“Original string: %s\n”,str);
printf(“Converted number: %1u\n” , num);
printf(“Leftover characters: %s\n” , leftover);
}
在上例中,要轉(zhuǎn)換的字符串太長,超出了無符號長整型值的取值范圍,因此,strtoul()函數(shù)將返回ULONG_MAX(4294967295),并使。char leftover指向字符串中導(dǎo)致溢出的那部分字符;同時,strtoul()函數(shù)還將全局變量errno賦值為ERANGE,以通知函數(shù)的調(diào)用者發(fā)生了溢出錯誤。函數(shù)strtod()和strtol()處理溢出錯誤的方式和函數(shù)strtoul()完全相同,你可以從編譯程序文檔中進一步了解這三個函數(shù)的有關(guān)細節(jié)。
2、C語言字符串與數(shù)字相互轉(zhuǎn)換
在C/C++語言中沒有專門的字符串變量,通常用字符數(shù)組來存放字符串。字符串是以“\0”作為結(jié)束符。C/C++提供了豐富的字符串處理函數(shù),下面列出了幾個最常用的函數(shù)。
● 字符串輸出函數(shù)puts。
● 字符串輸出函數(shù)gets。
● 字符串連接函數(shù)strcat。
● 字符串復(fù)制函數(shù)strcpy。
● 測字符串長度函數(shù)strlen。
C語言提供了幾個標準庫函數(shù),可以將任意類型(整型、長整型、浮點型等)的數(shù)字轉(zhuǎn)換為字符串,下面列舉了各函數(shù)的方法及其說明。
● itoa():將整型值轉(zhuǎn)換為字符串。
● ltoa():將長整型值轉(zhuǎn)換為字符串。
● ultoa():將無符號長整型值轉(zhuǎn)換為字符串。
● gcvt():將浮點型數(shù)轉(zhuǎn)換為字符串,取四舍五入。
● ecvt():將雙精度浮點型值轉(zhuǎn)換為字符串,轉(zhuǎn)換結(jié)果中不包含十進制小數(shù)點。
● fcvt():指定位數(shù)為轉(zhuǎn)換精度,其余同ecvt()。
還可以使用sprintf系列函數(shù)把數(shù)字轉(zhuǎn)換成字符串,其比itoa()系列函數(shù)運行速度慢。下列程序演示了如何使用itoa()函數(shù)和gcvt()函數(shù):
# include 《stdio.h》
# include 《stdlib.h》
int main ()
{
int num_int = 435;
double num_double = 435.10f;
char str_int[30];
char str_double[30];
itoa(num_int, str_int, 10); //把整數(shù)num_int轉(zhuǎn)成字符串str_int
gcvt(num_double, 8, str_double); //把浮點數(shù)num_double轉(zhuǎn)成字符串str_double
printf(“str_int: %s\n”, str_int);
printf(“str_double: %s\n”, str_double);
return 0;
}
程序輸出結(jié)果:
str_int: 435
str_double: 435.10001
● 代碼第11行中的參數(shù)10表示按十進制類型進行轉(zhuǎn)換,轉(zhuǎn)換后的結(jié)果是“435”,如果按二進制類型進行轉(zhuǎn)換,則結(jié)果為“1101110011”。
● 代碼第12行中的參數(shù)8表示精確位數(shù),這里得到的結(jié)果是“435.10001”。
評論
查看更多