| 比赛 | 
    NOIP2015普及组练习 | 
    评测结果 | 
    WWWWWWWWWW | 
    | 题目名称 | 
    Vigenère密码 | 
    最终得分 | 
    0 | 
    | 用户昵称 | 
    expletar | 
    运行时间 | 
    0.026 s  | 
    | 代码语言 | 
    C++ | 
    内存使用 | 
    0.22 MiB  | 
    | 提交时间 | 
    2015-11-03 20:38:39 | 
显示代码纯文本
#include<fstream>
#include<string>
using namespace std;
string s1,key;
ofstream  out ("vigenere.out");
ifstream in ("vigenere.in");
char tran (char a,char key)
{
	if (key>=a)
		return key-a+'A';
	else return 'Z'-a+key;
}
int main ()
{
	
	in>>key;
	in>>s1;
	int leg=key.length();
	int n=s1.length();
	
	for (string::iterator it=key.begin();it!=key.end();++it)
		*it=toupper(*it);
	bool flag;
	for (int i=0;i<n;++i)
	{
		flag=s1[i]<='Z'?1:0;
		if (flag)
			out<<char(toupper(tran(s1[i],key[i%leg])));
		else out<<char(tolower(tran(toupper(s1[i]),key[i%leg])));
	}
	
	return 0;
}