- ベストアンサー
文字列から数字への変換
文字列から数字への変換にはatoiなどを使うと思うのですが これだと文字として0を変換すると アルファベットなどを変換した場合と 同じになってしまいますよね? 0も入力を受け付けてなおかつ文字列は受け付けないように するにはどのようにすればよいのでしょうか? アドバイス・回答よろしくお願いします
- みんなの回答 (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"); のように使います。
その他の回答 (3)
- terra5
- ベストアンサー率34% (574/1662)
strtod()を使い、endptrを調べる。 strtod http://www.linux.or.jp/JM/html/LDP_man-pages/man3/strtod.3.html
お礼
回答有難うございます。
- Tacosan
- ベストアンサー率23% (3656/15482)
strtol とか.
お礼
回答有難うございます。
- anmochi
- ベストアンサー率65% (1332/2045)
一番楽(で遅い)な方法は文字列を全部舐めて0~9の範囲を確かめること。ASCIIの0x30~0x39だ。
お礼
やってみようと思います。 有難うございました。
お礼
ぜひ使ってみようと思います。 勉強になりました。 回答有難うございました。