c語言為我們提供了數字和字串之間的轉換函式,這些函式有很多,常用的有:
整型數轉字串函式itoa():
char *itoa(int value,char *string,int radix);
//int value 被轉換的整數,char *string 轉換後儲存的字元陣列,int radix 轉換進製數,如2,8,10,16 進製等
浮點數轉字串函式gcvt():
char *gcvt(double value, int ndigit, char *string);
//int value 被轉換的浮點數,char *string 轉換後儲存的字元陣列,int ndigit 有效位數
字串轉整型數函式atoi():
int atoi(const char *nptr);
//const char *nptr 字串首位址,返回值為轉換結果
字串轉浮點數函式atof():
double atof(const char *nptr);
//const char *nptr 字串首位址,返回值為轉換結果
下面通過一組測試用例說明幾個函式的使用方法
#include #include "stdlib.h"
using namespace std;
int main()
else unum=(unsigned)num;/*其他情況*/
/*轉換*/
dowhile(unum);
str[i]='\0';
/*逆序*/
if(str[0]=='-')k=1;/*十進位制負數*/
else k=0;
char temp;
for(j=k;j<=(i-1)/2;j++)
return str;
}
實現2:遞迴演算法中的引用與非引用
static void do_itoa(int i, char* &a)
if(i == 0)
else
}void itoa(int i, char* a)
do_itoa(i, a);
*a = '\0';
}
這份**是本人自己實現的,沒有採用上面的臨時字串加翻轉的方法,而是採用了遞迴。在實現過程的主要問題是引數a的向上傳遞,由於無法事先得知數字長度,所以利用遞迴過程中的臨時變數將其乙個乙個儲存起來,但a所指位置是和長度有關的。所以在遞迴過程中a的移動規則是不能確定的,只有在遞迴返回時才可以移動a,但這就要求a的改變必須可以向上層函式傳遞,否則只是改變了下層a的值,上層的a無法移動就會造成錯誤。
解決辦法就是採用指標引用或者二級指標了,但這樣又會改變實參值,導致呼叫完itoa()後指標引數改變,這對使用者來說簡直是一場噩夢,這裡採用的方法是中間加一層傳值函式,以此來隔離實參。
由於轉換長度有限,這種遞迴貌似有華而不實的嫌疑甚至可能會弄巧成拙,因為遞迴本身的呼叫時間很可能會比那個常數項因子更費時間。但這種設計思路還是值得學習的,一是利用引用向上傳遞引數變化,而是利用入口函式傳值隔離實參。
自己的atoi()函式:
這個函式不存在「回溯」的過程,可以用一次遍歷來解決問題。
int atoi(char *a)
if(*a == '+')
while(*a != '\0')
return res*flag;
}
最後總結一下:
1. c庫函式itoa()、gcvt()、atoi()、atof()的使用方法
2. 轉換表解決問題的思路
3. 遞迴向上傳引數用引用或二級指標,用入口函式隔離實參
能力有限,如有問題,歡迎各位大神批評指正!
數字與字串之間的轉換
2 數字轉字串 使用sprintf 函式 char str 10 int a 1234321 sprintf str,d a char str 10 double a 123.321 sprintf str,3lf a char str 10 int a 175 sprintf str,x a 10...
字串與數字之間的轉換
字串與數字之間的轉換 atof 的功能 將字串轉換成浮點型數 相關函式 atoi,atol,strtod,strtol,strtoul 所屬庫名 and 標頭檔案 include 定義函式 double atof const char nptr 函式說明 atof 會掃瞄引數nptr字串,跳過前面的...
字串與數字之間的轉換
c 11 提供了若干 to string t value 函式來將 t 型別的數字值轉換為字串形式。以下是幾個 to string 函式的列表 string to string int value string to string long value string to string double...