1. 程式人生 > >CCF 1029資訊加密

CCF 1029資訊加密

1029. 資訊加密 (Standard IO)

時間限制: 1000 ms  空間限制: 262144 KB  具體限制  

題目描述

在傳遞資訊的過程中,為了加密,有時需要按一定規則將文字轉換成密文傳送出去。有一種加密規則是這樣的:
1. 對於字母字元,將其轉換成其後的第3個字母。例如:A→D,a→d,X→A,x→a;
2. 對於非字母字元,保持不變。
現在,請你根據輸入的一行字元,輸出其對應的密碼。
 

輸入

輸入一個字串。

輸出

輸出加密後的字串。

樣例輸入

I(2016)love(08)China(15)!

樣例輸出

L(2016)oryh(08)Fklqd(15)!

資料範圍限制

字串長度不超過100。

問題分析

這個問題是考對ASCII碼錶和char一維陣列的應用。所以,第一個關鍵是把ASCII碼錶找出來,跟問題對照一下就知道怎麼轉換了。大寫字母在65-90之間,但是超過87(W)的就要應用不同的處理方式;小寫字母在97-122之間,但是119(w)也一樣要用不同和處理方式。程式碼如下:

#include <iostream>
using namespace std;

int main()
{
	int i=0;
	char a[100]={0},b[100]={0};//字元陣列要先初始化,否則輸出時可能會出現亂碼
	gets(a);
	while(a[i]!='\0')//判斷字串結尾符號
	{
		if(a[i]>=65 && a[i]<=90)//大寫字母
		{
			if(a[i]>=88)
				b[i] = a[i] - 23;//X,Y,Z
			else
				b[i] = a[i] + 3;
		}
		else if(a[i]>=97 && a[i]<=122)//小寫字母
		{
			if(a[i]>=120)
				b[i] = a[i] - 23;//x,y,z
			else
				b[i] = a[i] + 3;
		}
		else
			b[i] = a[i];
		i++;
	}
	printf("%s",b);
	return 0;
}