[C++] AIZU ONLINE JUDGE <ITP_1_8_A>

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
mahiknock
記事: 8
登録日時: 6ヶ月前
連絡を取る:

[C++] AIZU ONLINE JUDGE <ITP_1_8_A>

#1

投稿記事 by mahiknock » 6ヶ月前

AIZU ONLINE JUDGE <ITP_1_8_A> の問題に関してです。

************************************************************
https://onlinejudge.u-aizu.ac.jp/#/cour ... 8/ITP1_8_A

※以下引用

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

// Input
文字列が1行に与えられます。
// Output
与えられた文字列の小文字と大文字を入れ替えた文字列を出力して下さい。
アルファベット以外の文字はそのまま出力して下さい。

// Constraints
入力される文字列の長さ < 1200

// Sample Input
fAIR, LATER, OCCASIONALLY CLOUDY.
// Sample Output
Fair, later, occasionally cloudy.
************************************************************

コードを提出したところ PRESENTATION ERROR と判定されました。
自身で調べて改良を加えているものの一向に改善する気配がありません。
環境は C++ gcc 5.1.1 20150422 (Red Hat 5.1.1-1) です。
些細なミスだと思いますが自身では気づけていないので、改良点を教えて下さい。
(C++ に慣れてきている段階なので可読性などの些細な点には目をつぶって頂けると幸いです)

コード:

#include <iostream>
#include <cstdio>
using namespace std;

class ORDER {
public:
	char temp;
	void CHANGE() {
		while (temp = cin.get()) {
			if (temp == EOF) {
				cin.clear();
				cin.seekg(0, ios::end);
				break;
			}
			if (0x41 <= temp && temp <= 0x5A) {  // 0x41 = 'A', 0x5A = 'Z'
				temp += 0x20;
			}
			else if (0x61 <= temp && temp <= 0x7A) {  // 0x61 = 'a', 0x7A = 'z'
				temp -= 0x20;
			}
			cout << temp << flush;
		}
		cout << endl;
	}
};

int main() {
	ORDER x;
	x.CHANGE();
	return 0;
}

アバター
みけCAT
記事: 6025
登録日時: 7年前
住所: 千葉県
連絡を取る:

Re: [C++] AIZU ONLINE JUDGE <ITP_1_8_A>

#2

投稿記事 by みけCAT » 6ヶ月前

ループを抜けた後に改行を出力しているので、入力で改行を読み込んで出力したのと被ってしまうためにPRESENTATION ERRORになると予想できます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
mahiknock
記事: 8
登録日時: 6ヶ月前
連絡を取る:

Re: [C++] AIZU ONLINE JUDGE <ITP_1_8_A>

#3

投稿記事 by mahiknock » 6ヶ月前

みけCAT さんが書きました:ループを抜けた後に改行を出力しているので、入力で改行を読み込んで出力したのと被ってしまうためにPRESENTATION ERRORになると予想できます。
改行の出力をなくしましたところ、無事正答判定となりました。
みけCAT さん、ありがとうございました。

返信

“C言語何でも質問掲示板” へ戻る