北京航空宇宙大学のある年の保研は飛行機の問題に乗ります
2219 ワード
逆シーケンス暗号化(非ファイル)【問題の説明】鍵として1つのアルファベット列(重複アルファベットを含むことができ、アルファベットの個数は50を超えない)を使用する暗号化方法がある.鍵の単語列がfeatherであると仮定すると、鍵の単語の重複アルファベットを除いて単語列feathrを得て、それを逆シーケンスし、アルファベット表の他のアルファベットを逆順序で後に追加した:r h t a e f z y x w v u s q p o n m l k j i g d c暗号化アルファベットの対応関係は以下の通りである:a b c d e f g h i j k l m n o p q r s t u v x y z t a e f w s q p o n m l k ig d c bのうち、第1の動作は元の英語アルファベットであり、第2の動作は暗号化アルファベットに対応する.他の文字は暗号化されません.入力した文字列を暗号化するプログラムを作成します.入力された暗号化される文字列のアルファベットはすべて小文字であり、入力キーもすべて小文字であると仮定します.【入力形式】標準入力から鍵列を入力し、次の行に暗号化する文字列を入力します.鍵列の文字数は50個を超えず、暗号化される文字列の文字数は100個を超えない.【出力形式】暗号化した結果を標準出力に出力します.【サンプル入力】feather c language is wonderful.【サンプル出力】t urqzjrze xl gpqaemfju.【例の説明】まず、所与の鍵単語を重複アルファベットを除去して逆順序にし、その後、上の暗号化対応表に従って後の内容を暗号化すると、暗号化された文字列が得られ、ここでは英字のみを暗号化して変換し、英字がすべて小文字であると仮定する.
【採点基準】計5つの試験点がある.コミットプログラム名example 2.c
【採点基準】計5つの試験点がある.コミットプログラム名example 2.c
#include
#include
int main ()
{
char ch, words[50], secret_key[50], str[100];
char alphabet[27] = {"abcdefghijklmnopqrstuvwxyz"};
int i, j, k, len;
i = 0;
/* ch = getchar();
while (ch != '
')
{
words[i] = ch;
ch =getchar();
i ++;
}
words[i] = '\0';
i = 0;
ch = getchar();
while (ch != '
')
{
str[i] = ch;
ch =getchar();
i ++;
}
str[i] = '\0';
*/
gets(words);
gets(str);
len = strlen(words);
for (i = 0; i < len; i ++)//
{
for (j = i + 1; j < len; j ++)
{
if (words[i] == words[j])
{
for (k = j ; k < len; k ++)
{
words[k] = words[k + 1];
len --;
}
}
}
}
//
for (i = len - 1, j = 0; i >= 0; i --, j ++)
{
secret_key[j] = words[i];
}
i = len;
j = 25;
while (i < 26 && j >= 0)
{
for (k = 0; k < len; k ++)//
{
if (secret_key[k] == alphabet[j])// , ,
{
j --;
break;
}
}
if (k == len)// ,
{
secret_key[i] = alphabet[j];
i ++;
j --;
}
}
//
for (i = 0; str[i] != '\0'; i ++)
{
if (str[i] >= 'a' && str[i] <= 'z')
{
len = str[i] - 'a';
putchar(secret_key[len]);
}
else
putchar(str[i]);
}
putchar('
');
return 0;
}