[AIZU ONLINE JUDGE]ITP1 8 Aの大文字と小文字の入れ替えをc++で解いてみた

AIZU ONLINE JUDGE

こんにちは! mnbd(@mnbbbbbd)です。

AIZU ONLINE JUDGEの「ITP1 8 A 大文字と小文字の入れ替え」を解いてみましたので、その回答と解説をご紹介いたします。

プログラミング初心者なので、もっといい回答があるに違いありません。

あくまでも「動作はする」サンプルとしてご覧ください。

問題文

与えられた文字列の小文字と大文字を入れ替えるプログラムを作成してください。

https://onlinejudge.u-aizu.ac.jp/courses/lesson/2/ITP1/8/ITP1_8_A

回答

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

int main() {
    char c[1200];
    cin.getline(c, sizeof(c));
    char *p = c;

    while(*p) {
        if(isupper(*p)) {
            *p = tolower(*p);
        } else if(islower(*p)) {
            *p = toupper(*p);
        }
        p++;
    }
    cout << c << endl;
    return 0;
}

解説

char型の配列に一行の文字列を受け取って、後はループで各文字列の大文字か小文字かでその逆に変換して代入しています。

私がハマったポイント

cinからの文字入力に空白が含まれているとそれ以降の文字が格納されない。

学んだこと

cinをそのまま使うと、空白を「\0」と判断して終了と解釈されてしまうようです。

これを回避するためには、cin.getline関数を使用します。

そうするとchar型の配列に空白を含む文字列が格納されます。

まとめ

AIZU ONLINE JUDGEの「ITP1 8 A 大文字と小文字の入れ替え」を解いてみましたので、その回答と解説をご紹介いたしました。

私はまだ初心者ですが、よかったら一緒に勉強していきましょう。

Twitterなどをフォローしていただければ幸いです。

以上です。
読んでいただきありがとうございました。