けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ARC 045 A - スペース高橋君 (7Q, 試験管灰色)

現代の AtCoder にはあまりない「一行読み込み」を要求する問題

問題概要

"Left Left Right Right AtCoder" のように、"Left", "Right", "AtCoder" のいずれかを空白区切りで連結した文字列が一行で与えられる。

  • "Left" は "<" に replace して
  • "Right" は ">" に replace して
  • "AtCoder" は "A" に replace して

得られる文字列を出力せよ。

考えたこと

C++ では、いつも通り次のようにしてしまうと、空白のところで自動的に打ち切られてしまう。

string S;
cin >> S;

そこで、一行まるごと文字列として読み込む。そのためには、次のように getline() を使えばよい。

string S;
getline(cin, S);

あとは、文字列  S に対して、問題文で指定された replace する処理をしていけばよい。

コード

#include <bits/stdc++.h>
using namespace std;

int main() {
    string S;
    getline(cin, S);

    string res = "";
    for (int i = 0; i < S.size();) {
        if (S[i] == 'L') res += "<", i += 4;
        else if (S[i] == 'R') res += ">", i += 5;
        else if (S[i] == 'A') res += "A", i += 7;
        else res += " ", i++;
    }
    cout << res << endl;
}