Aizu Online Judge(AOJ)が提供している「プログラミング入門」(ITP1)の8_A問題をC++とPython で解いてみました。
ITP1 のトピック8では、文字について学びます。「プログラムで文字を扱う方法を学習します。」とあります。この学習コースを通じて、Python に慣れていきたいと考えています。
問題(8_A: Toggling Cases)
問題はリンク先をご覧ください。
与えられた文字列(1行)の英字大文字と小文字を入れ替えて出力します。
解答案
C++ プログラム例(ITP1 8_A)
iostream では、空白を区切りと認識するようです。問題のサンプル入力に空白が入っていたため、C標準ライブラリの scanf で1文字読み込み、文字の判定をして出力しました。
文字の判定では、C標準ライブラリの ctype.h で定義されている関数を使いました。15行目から18行目で使っています。
#include <cstdio>
#include <cctype>
using namespace std;
int main()
{
char ch;
while (1) {
scanf("%c", &ch);
if (ch == '\n') {
break;
}
if (islower(ch)) {
printf("%c", toupper(ch));
} else if (isupper(ch)) {
printf("%c", tolower(ch));
} else {
printf("%c", ch);
}
}
printf("\n");
return 0;
}
Python プログラム例(ITP1 8_A)
Python も、C標準ライブラリとほぼ同じメソッドがあるため、それを使いました。中心的な処理の背景色を変更しています。
s = input()
for i, ch in enumerate(s):
if ch.isupper():
print(ch.lower(), end="")
elif ch.islower():
print(ch.upper(), end="")
else:
print(ch, end="")
print()
上記プログラムは、すべて AOJ で「AC(Accepted=正解)」と判定されます。
最後に
トピック8では、文字および文字列について学びます。文字を学ぶとプログラムで表現できる範囲が大きく広がっていくと考えています。
引き続き、ITP1 の問題を紹介していきます。