ABC472 A - A
A
考え方
入力は文字列が $1$ つなので、string 型の変数を $1$ つ用意し、cin で入力を受け取る。
文字列の中身を $1$ 文字ずつ見ていきたいので、forループを用意する。
問題の指示通り、文字列に含まれる A 以外の文字を全て . に変えてしまえばよい。
これは、改めて解答の文字列を作るより、入力を保管した文字列を直接編集するのが楽。
まず、s.size() または ssize(s) で s の長さを取得し、適当に n か何かに保管する。
前から $i$ 文字目を見ているループを以下のように書く。
for (int i=0; i<n; i++) {
処理
}
処理は、まず、その文字が A ではない、つまり s.at(i)!='A' であるかどうかをif文で判定する。
A でなかった場合には、その文字を . に変える。
ループが終わったら、できた文字を出力すればよい。
入力例1での動作
入力を受け取る。
s: "ATCODER"
文字数は $7$ である。
各文字を前から順に見る。
| 位置 | 元の文字 | 判定・処理 | 処理後の文字 |
|---|---|---|---|
| $1$ | A |
A なので変更しない |
A |
| $2$ | T |
A ではないので . に変更 |
. |
| $3$ | C |
A ではないので . に変更 |
. |
| $4$ | O |
A ではないので . に変更 |
. |
| $5$ | D |
A ではないので . に変更 |
. |
| $6$ | E |
A ではないので . に変更 |
. |
| $7$ | R |
A ではないので . に変更 |
. |
したがって、処理後の s は A...... となるので、これを出力する。
注意点
特になし。
別解
範囲for文と参照渡しを用いると、コードをシンプルに書ける。
ただし、範囲for文はB問題レベル、参照渡しはC問題レベルと、使いこなすには少し高度な知識が必要。