問題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なんだね。
この解答例では、char 自体の値(アスキーコードの値)を使っているよ。そうすると、11行目でやっているように、その文字が0~9までの値なのかとか、14行目のようにcの値が何なのかがわかるんだ。'0'は48で、'9'は57なんだね。
0 | NUL | 16 | DLE | 32 | SP | 48 | 0 | 64 | @ | 80 | P | 96 | ` | 112 | p |
1 | SOH | 17 | DC1 | 33 | ! | 49 | 1 | 65 | A | 81 | Q | 97 | a | 113 | q |
2 | STX | 18 | DC2 | 34 | " | 50 | 2 | 66 | B | 82 | R | 98 | b | 114 | r |
3 | ETX | 19 | DC3 | 35 | # | 51 | 3 | 67 | C | 83 | S | 99 | c | 115 | s |
4 | EOT | 20 | DC4 | 36 | $ | 52 | 4 | 68 | D | 84 | T | 100 | d | 116 | t |
5 | ENQ | 21 | NAK | 37 | % | 53 | 5 | 69 | E | 85 | U | 101 | e | 117 | u |
6 | ACK | 22 | SYN | 38 | & | 54 | 6 | 70 | F | 86 | V | 102 | f | 118 | v |
7 | BEL | 23 | ETB | 39 | ' | 55 | 7 | 71 | G | 87 | W | 103 | g | 119 | w |
8 | BS | 24 | CAN | 40 | ( | 56 | 8 | 72 | H | 88 | X | 104 | h | 120 | x |
9 | HT | 25 | EM | 41 | ) | 57 | 9 | 73 | I | 89 | Y | 105 | i | 121 | y |
10 | LF | 26 | SUB | 42 | * | 58 | : | 74 | J | 90 | Z | 106 | j | 122 | z |
11 | VT | 27 | ESC | 43 | + | 59 | ; | 75 | K | 91 | [ | 107 | k | 123 | { |
12 | FF | 28 | FS | 44 | , | 60 | < | 76 | L | 92 | \ | 108 | l | 124 | | |
13 | CR | 29 | GS | 45 | - | 61 | = | 77 | M | 93 | ] | 109 | m | 125 | } |
14 | SO | 30 | RS | 46 | . | 62 | > | 78 | N | 94 | ^ | 110 | n | 126 | ~ |
15 | SI | 31 | US | 47 | / | 63 | ? | 79 | O | 95 | _ | 111 | o | 127 | DEL |
初めての方へ:このページは、このサイトで用意しているプログラミング問題の解答と解説のページです。このサイトではブラウザ上からプログラミングができます。会員登録(無料)して、プログラミングしてみませんか?
新規登録
新規登録