問題
英大文字からなる文字列 が与えられる。 の各文字を空白で区切り、1文字ずつ出力せよ。
入力
1行目に、文字列 が与えられる。
条件
- は英大文字のみで構成される。
出力
答えとなる文字列を1行で出力すること。
解法
の 文字目と 文字目の間に を、 文字目と 文字目の間に
を、というようにして順に文字を出力していけば、答えとなる文字列が出力できます。
このときに、文字列 の長さを とすると、 文字目と 文字目の間で を、というところで終了することに気をつける必要があります。
というのも、単純に 回分のforループを回してしまうと、 文字目の後に空白スペースが生まれてしまい、答えとなる文字列と異なるものになってしまうからです。
ソースコード
以下のようにして、main()
関数の中に直接実装しました。
int main() { string s; cin >> s; // 文字列 s の入力を行う int n = s.length(); // 文字列 s の長さ n を出す // string が 0-indexであることに気をつけて、forループを記述する for (int i = 0; i < n; i++) { cout << s[i]; // まずは s[i] を出力する if (i == n - 1) { cout << endl; // 最後の文字であった場合は改行する } else { cout << " "; // 最後の文字でない場合は、空白を出力する } } return 0; }
感想
前にAtCoderの問題について記事を書いたのはABC180*1だったんですね…。 おそらく当時の最新ではないと思いますが、この間にコンテスト数が150個もあったのはすごいですね。