文字列の処理を練習する問題ですね
問題概要
文字の文字列 が与えられます。 は英文字のみからなります。
の 文字目以降について、
- 大文字ならば小文字に
- 小文字ならば大文字に
なるように変換してくだだい。
制約
考えたこと
この問題では、次のような処理をすればよいでしょう。
for (int i = K - 1; i < N; ++i) { S[i] を大文字・小文字を入れ替える }
ここで、i = K
から始めるのではなく、i = K - 1
から始めることに注意しましょう。 は 1-indexed で与えられますが、プログラミングでは 0-indexed で考えることが多いからです。
大文字と小文字の変換方法
最後に、大文字と小文字の変換方法を考えましょう。最初に小文字を大文字に変換する方法を考えます。まず文字 c
が小文字かどうかは
if (c >= 'a' && c <= 'z')
というようにして判定できます。その上で大文字にするためには
c += 'A' - 'a';
というようにすることが考えられます。大文字から小文字への変換も同様に行えます。
コード
#include <bits/stdc++.h> using namespace std; int main() { int N, K; string S; cin >> N >> K >> S; for (int i = K-1; i < N; ++i) { // 小文字を大文字に変換 if (S[i] >= 'a' && S[i] <= 'z') { S[i] += 'A' - 'a'; } // 大文字を小文字に変換 else { S[i] -= 'A' - 'a'; } } cout << S << endl; }