[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[WitchTech 00708] Re: 文字列を数値に変換するには?



なるなると申します。

# 引用中の丸数字は書き換えています。

 > <3A8A8657.FEF329BB@lares.dti.ne.jp>
 > From: motoki@lares.dti.ne.jp
 > Date: Wed, 14 February 2001 22:21:27 +0900

 > 現在、簡単な電卓を作ろうとしているのですが、
 > (数値の)文字列を数値に変換するところで悩んでいます。

簡単な電卓なら、とりあえず 10 進の整数でいいですよね。(3 桁くらいでいいか
な。 'X' 'Y' 'Z' = 10 * (10 * X + Y) + Z はいいですよね。)


 > 1. 入力された第1の数値を、strcat()でくっつけて配列Aに入れる
 > 2. 加減乗除のいずれかの演算子を入力する
 > 3. 第2の数値を入力し、strcat()して配列Bに入れる

# ちょっと難しそうな入力のほうは、すでに出来てしまっているんですね。

 > 4. イコールを入力すると、配列A と配列Bを数値に変換し、2.の演算子で計算を行う
 > 
 > というカンジにしたいのですが、4.の配列を数値に変換するのが難しくて困ってます。


なんか難しいことを考えすぎているのだと思いますが ASCII コードはご存じでしょ
うか ?

別に知らなくても実際にメモリ上で '0' - '9' までの数字がどういう値をとるか
調べてみれば良いわけですよね。たとえば、こんなの

--begin
#include <stdio.h>

int main()
{
    int i;

    for (i = 0x20; i < 0x80; i++) {
	printf("%02X: '%c'%c", i, i, (i + 1) % 8 ? ' ' : '\n');
    }
    return 0;
}
--end

'0' - '9' -> 0 - 9 に変換する答えは見ればわかると思いますので、省略します。

# でも、せっかく作るんだから 16 進数も使えたほうがいいよね。


 > atoi()やatof()のような処理を実現させるにはどのようにすれば良いのでしょうか?

# atoi, atof とか strtol, strtod をキーにしてサーチエンジンで探してみると
か。

あとは K&R (atoi) とか Plauger のライブラリの本にコードが出ていると思いま
す。



ML Archives