問題CPP00210の解答例と解説 C++ Lv.2

文字列から整数への変換(cahr*->int)(15分)


<解答例 1>
この解答は問題文にある解答とほとんど同じだけど、変換に失敗した場合にエラーメッセージを出力するようにしているよ。

それで改めて、結果を見てみると、以下のようになるよ。
 1 [OK] : "100"-> 100
 2 [OK] : "-100"-> -100-はきちんと読んでくれる。
 3 [OK] : "+100"-> 100+もきちんと読んでくれる。
 4 [OK] : "10.5"-> 10小数点は文字とみなされて、そこから先は無視される。
 5 [OK] : "abc"-> 0文字の場合は 0 が返る。
 6 [OK] : "abc100"-> 0文字の後に整数があってもダメ。
 7 [OK] : "100abc"-> 100整数が先にある場合は、文字が表れるまでを読んでくれる。


<解答例 2>
C言語風に書くなら、atoi という関数を使って、こう書けるよ。atoi の名前の由来は、ASCII to Integer なので、関数名は思い出しやすいね。(ASCIIは半角文字列のコードの規約だよ) これだけ見ると、atoi 関数を使った方が簡単に書けるんだけど、atoi 関数はエラーを検知することができないんだ。long とか double に変換したい場合は atol、atof という別の関数が用意されているよ。


<解答例 3>
1文字ずつ自分で整数の値を作ろうとすると、例えばこうなるよ。半角スペースが表れた場合に無視するということは、簡単のためにここではしていないよ。

この解答例では、char 自体の値(アスキーコードの値)を使っているよ。そうすると、11行目でやっているように、その文字が0~9までの値なのかとか、14行目のようにcの値が何なのかがわかるんだ。'0'は48で、'9'は57なんだね。

0 NUL 16 DLE 32 SP 48 0 64 @ 80 P 96 ` 112p
1 SOH 17 DC1 33 ! 49 1 65 A 81 Q 97 a 113q
2 STX 18 DC2 34 " 50 2 66 B 82 R 98 b 114r
3 ETX 19 DC3 35 # 51 3 67 C 83 S 99 c 115s
4 EOT 20 DC4 36 $ 52 4 68 D 84 T 100d 116t
5 ENQ 21 NAK 37 % 53 5 69 E 85 U 101e 117u
6 ACK 22 SYN 38 & 54 6 70 F 86 V 102f 118v
7 BEL 23 ETB 39 ' 55 7 71 G 87 W 103g 119w
8 BS 24 CAN 40 ( 56 8 72 H 88 X 104h 120x
9 HT 25 EM 41 ) 57 9 73 I 89 Y 105i 121y
10 LF 26 SUB 42 * 58 : 74 J 90 Z 106j 122z
11 VT 27 ESC 43 + 59 ; 75 K 91 [ 107k 123{
12 FF 28 FS 44 , 60 < 76 L 92 \ 108l 124|
13 CR 29 GS 45 - 61 = 77 M 93 ] 109m 125}
14 SO 30 RS 46 . 62 > 78 N 94 ^ 110n 126~
15 SI 31 US 47 / 63 ? 79 O 95 _ 111o 127DEL







初めての方へ:このページは、このサイトで用意しているプログラミング問題の解答と解説のページです。このサイトではブラウザ上からプログラミングができます。会員登録(無料)して、プログラミングしてみませんか?
新規登録



ログイン
メールアドレス:

パスワード:



パスワード紛失

新規登録