ABC462 A - Secret Numbers
隠された数
考え方
入力は文字列が $1$ つなので、string 型の変数を $1$ つ用意し、cin で入力を受け取る。
文字列の中身を $1$ 文字ずつ見ていきたいので、forループを用意する。
それぞれの文字について、if文で以下を行えばよい。
- 数字なら、それを答え用の文字列に追加する
- 数字でないなら何もしない
数字かどうかの判定は、文字が '0' 以上 '9' 以下かどうかで行える。
if (s.at(i) >= '0' && s.at(i) <= '9') {
result += s.at(i);
}
また、標準ライブラリ関数 isdigit を用いてもよい。
if (isdigit(s.at(i))) {
result += s.at(i);
}
最後に、作った答え用の文字列を cout で出力すればよい。
入力例1での動作
入力を受け取る。
s: "abc462"
左から $1$ 文字ずつ見て、数字である文字だけを取り出していく。
| 位置 | 文字 | 判定 | ここまでに取り出した数字 |
|---|---|---|---|
| $0$ | 'a' |
数字ではない | "" |
| $1$ | 'b' |
数字ではない | "" |
| $2$ | 'c' |
数字ではない | "" |
| $3$ | '4' |
数字 | "4" |
| $4$ | '6' |
数字 | "46" |
| $5$ | '2' |
数字 | "462" |
数字だけを元の順序で並べると "462" になるので、これを出力する。
注意点
特になし。
別解
ループ内で「今何番目であるか」を使わないので、範囲for文を使ってもよい。
for (char c : s) {
if (isdigit(c)) {
result += c;
}
}
いちいち .at(i) を書く手間が省けるし、文字列の長さを自分で取得するのも不要になる。