2016-04-26 14 views
-3

"4 + 4"のような簡単な数式を評価できるプログラムを作成しようとしています。式はユーザーから与えられます。シングルチャートをダブルに変換する方法

プログラムはchar*に保存し、バイナリ操作(+、 - 、*、:)を検索して操作します。 chardouble値に変換する方法がわかりません。問題は、単一double値に変換する方法がわかりません。

私はatof機能がありますが、私は単一のcharを変換したいと思います。

char*を作成せずにこれを行う方法はありますか?

+0

文字が1つの場合は、明示的に数字をチェックしないでください。または、int(ASCIIテーブル)として、 '0'から '9'までは48から57 ...と表されます。 – sperber

+2

'プログラムはそれをchar *に保存します。' - それは起こりません。文字をバッファではなくポインタに保存しています。 – PaulMcKenzie

+0

あなたの質問はあまり明確ではありません。あなたは '' 0 '=> 0' ... '' 9 '=> 9'を意味し、他の文字以外の文字はすべてエラーですか? –

答えて

0

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

'digit - '0' ''は移植可能です。それはASCIIを仮定せず、**任意の**文字エンコーディングで動作します。 –

0

文字を作成せずにそれを行うための方法があります* ???

確かに。次のように単一charから桁の数字を抽出することができる:これは、値の連続的な集合でASCII又はEBCDICエンコード桁のような特定の文字テーブルが'0'始まること状況を使用

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

+0

charが '0'から '9'までのASCII値であると仮定します。おそらくここでは安全かもしれないが、OPのポストは何度も自信を与えてくれない... –

関連する問題