• ベストアンサー

文字列から数字への変換

文字列から数字への変換にはatoiなどを使うと思うのですが これだと文字として0を変換すると アルファベットなどを変換した場合と 同じになってしまいますよね? 0も入力を受け付けてなおかつ文字列は受け付けないように するにはどのようにすればよいのでしょうか? アドバイス・回答よろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.4

通常は#1の方が述べているように自前で、atoi相当の関数を作ります。 以下の例は自前のatoiの最も簡単な例です。 この関数をmy_atoiとします。 int my_atoi( char *str ) { int i; int num = 0; char *p = str; int len = strlen(str); if (len > 9) return -1; for (i = 0; i < len;i++,p++){ if (*p < '0' || *p >'9') return -1; num = (10 * num) + (*p - '0'); } return num; } 入力文字列を数値に変換した結果を返します。 エラーがあった場合は-1を返します。 入力文字列は最大9桁までで'0'から'9'の文字のみ有効とします。(+,-、A等はエラーとなります) 入力文字列は終端が\0であることが前提です。 int a; a=my_atoi("02342"); のように使います。

weasel
質問者

お礼

ぜひ使ってみようと思います。 勉強になりました。 回答有難うございました。

その他の回答 (3)

  • terra5
  • ベストアンサー率34% (574/1662)
回答No.3

strtod()を使い、endptrを調べる。 strtod http://www.linux.or.jp/JM/html/LDP_man-pages/man3/strtod.3.html

参考URL:
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/strtod.3.html
weasel
質問者

お礼

回答有難うございます。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

strtol とか.

weasel
質問者

お礼

回答有難うございます。

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

一番楽(で遅い)な方法は文字列を全部舐めて0~9の範囲を確かめること。ASCIIの0x30~0x39だ。

weasel
質問者

お礼

やってみようと思います。 有難うございました。