1298:これまでハーデスト問題:文字列クラスは、高速で文字変換を処理します

タイトル変換

ジュリアス・シーザーは危険と陰謀のフルタイムに住んでいます。シーザーが直面する最も困難な状況が命を救うことです。生き残るためには、彼が最初にパスワードを作成することを決めました。このパスワードは、人々はそれがどのように動作するか分からないので、信じられないほどの音です。

あなたはシーザーの軍隊の副キャプテンです。あなたの仕事は情報を解読することであるシーザーを送信し、あなたにそれを提供し、一般的な。コードは単純です。平文メッセージ内の各文字を、(文字が「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;
	}
}
公開された186元の記事 ウォン称賛13 ビュー9306

おすすめ

転載: blog.csdn.net/csyifanZhang/article/details/105214974