2016-04-26 85 views
-3

我嘗試創建一個可以評估簡單數學表達式(如「4 + 4」)的程序。表達式由用戶給出。如何將單個字符轉換爲雙精度

該程序將其保存在char*中,然後搜索二元運算(+, - ,*,:)並執行操作。

問題是,我不知道如何將單個char轉換爲double值。

我知道有atof函數,但我想轉換單個char

有沒有辦法做到這一點,而不創建一個char*

+0

如果它是一個字符,爲什麼不明確檢查數字?或者將它用作int(ASCII表),'0'到'9'表示爲48到57 ... – sperber

+2

'程序將它保存在char *中 - 這不會發生。您將字符保存到緩衝區中,而不是指向指針。 – PaulMcKenzie

+0

你的問題不是很清楚。你的意思是''0'=> 0' ...''9'=> 9'並且所有其他非數字字符都是錯誤的嗎? –

回答

0

A char通常代表一個字符。然而,單個char只是至少[-127,+ 127](簽名版本)或至少[0,255](未簽名版本)範圍內的整數。

如果您獲得了一個看起來像一個數字的字符,存儲在其中的值是表示它的ASCII碼。數字從代碼48開始(零),然後遞增,直到代碼57(9)。因此,如果你拿這個代碼並減去48,你就得到了整數值。從那裏,把它轉換爲雙是一個鑄造的問題。

這樣:

char digit = ... 
double value = double(digit - 48); 

,甚至更好,爲了方便:

char digit = ... 
double value = double(digit - '0'); //'0' has a built-in value 48 
+1

'數字 - '0'''是便攜式;它不假定ASCII,並且可以用於任何**字符編碼。 –

0

有一種方法可以做到這一點,而無需創建一個char * ???

當然。可以從一個單一的char提取位數如下:

char c = '4'; 
double d = c - '0'; 
     // ^^^^^^^ this expression results in a numeric value that can be converted 
     //   to double 

這使用了起始於'0'ASCIIEBCDIC編碼在一組連續的值的位數一定字符表的情況。

+0

假設char是從'0'到'9'的ASCII值。這裏可能很安全,但是OP的帖子並沒有激發出很多信心...... –