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

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

AtCoder ABC 338 A - Capitalized? (7Q, 灰色, 100 点)

基礎的な線形探索の問題!

問題概要

アルファベット文字からなる文字列  S が与えられる。次の条件を満たすかどうかを判定せよ。

  •  S の先頭の文字は大文字である
  •  S の先頭以外の文字はすべて小文字である

考えたこと

まず、先頭の文字が小文字である場合は "No" である。これ以降、先頭の文字は大文字であるとして考えよう。

このとき、文字列 S の各文字 S[0], S[1], S[2], ... のうち、先頭の S[0] を除いた S[1], S[2], ... がすべて小文字であるかどうかを判定すればよい。

コード

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

int main() {
    string S;
    cin >> S;

    if (islower(S[0])) {
        // 先頭が小文字の場合は問答無用で "No" である
        cout << "No" << endl;
        return 0;
    }

    bool res = true;
    for (int i = 1; i < S.size(); ++i) {
        if (isupper(S[i])) res = false;
    }

    if (res) cout << "Yes" << endl;
    else cout << "No" << endl;
}