數字與字串之間的轉換

2021-07-11 18:25:49 字數 1969 閱讀 6199

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...