我嘗試創建一個可以評估簡單數學表達式(如「4 + 4」)的程序。表達式由用戶給出。如何將單個字符轉換爲雙精度
該程序將其保存在char*
中,然後搜索二元運算(+, - ,*,:)並執行操作。
問題是,我不知道如何將單個char
轉換爲double
值。
我知道有atof
函數,但我想轉換單個char
。
有沒有辦法做到這一點,而不創建一個char*
?
我嘗試創建一個可以評估簡單數學表達式(如「4 + 4」)的程序。表達式由用戶給出。如何將單個字符轉換爲雙精度
該程序將其保存在char*
中,然後搜索二元運算(+, - ,*,:)並執行操作。
問題是,我不知道如何將單個char
轉換爲double
值。
我知道有atof
函數,但我想轉換單個char
。
有沒有辦法做到這一點,而不創建一個char*
?
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
'數字 - '0'''是便攜式;它不假定ASCII,並且可以用於任何**字符編碼。 –
如果它是一個字符,爲什麼不明確檢查數字?或者將它用作int(ASCII表),'0'到'9'表示爲48到57 ... – sperber
'程序將它保存在char *中 - 這不會發生。您將字符保存到緩衝區中,而不是指向指針。 – PaulMcKenzie
你的問題不是很清楚。你的意思是''0'=> 0' ...''9'=> 9'並且所有其他非數字字符都是錯誤的嗎? –