タイトル変換
ジュリアス・シーザーは危険と陰謀のフルタイムに住んでいます。シーザーが直面する最も困難な状況が命を救うことです。生き残るためには、彼が最初にパスワードを作成することを決めました。このパスワードは、人々はそれがどのように動作するか分からないので、信じられないほどの音です。
あなたはシーザーの軍隊の副キャプテンです。あなたの仕事は情報を解読することであるシーザーを送信し、あなたにそれを提供し、一般的な。コードは単純です。平文メッセージ内の各文字を、(文字が「A」である場合、すなわち、その暗号文が「F」である)5セキュリティメッセージを作成するために正しい位置に移動します。あなたはシーザーからプレーンテキストメッセージを作成しているので、あなたは逆の操作を実行します
Cipher text
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Plain text
V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
このパスワード文字だけシフト。任意のアルファベット以外の文字は、すべての英字は大文字である必要があり、不変でなければなりません。
エントリー
この問題への入力は、最大100個のデータセットに、(空でない)シリーズが含まれています。データの各セットは、以下に記載されるようにフォーマットされ、ブランク行がデータセットとの間に存在しません。すべての文字が大文字にされています。
単一のデータ・セットは、次の3つのコンポーネントが含まれています。
- スタートライン - ライン、 "START"
- パスワードメッセージ - シーザーからメッセージを含む200文字(含む)のいずれかからの行と、
- 行の終わり - ライン、「END」
最後のデータセットの後、「ENDOFINPUT」の行です。
輸出
各データセットの場合は、出力の一行のみが存在します。これは、最初の情報シーザーです。
アイデア解析
文字列クラスは非常に良い操作、getline(cin,str)
順番に各文字を処理することができ、その後のために、(先頭の空白を省略覚えている)文字の行を読み取ります。
#include<iostream>
#include<map>
#include<string>
#include<string.h>
using namespace std;
int main() {
string s1, s2, s3;
while (cin >> s1 && s1 != "ENDOFINPUT") {
if (s1 == "END")continue;
cin.get();//略去前导回车
getline(cin, s2);
s3.assign(s2);
for (unsigned i = 0; i < s2.size(); i++) {
if (s2[i] >= 'A'&&s2[i] <= 'Z') {
if (s2[i] >= 'A' + 5) s3[i] = s2[i] - 5;
else s3[i] = s2[i] - 5 + 26;
}
else s3[i] = s2[i];
}
cout << s3 << endl;
}
}