P1079 Vigenère 密码 (简单模拟&字符串)

题目传送门

题意:给出密钥和密文求明文。

思路:分两种情况:每种情况又分大小写两种情况即可。大小写可以用toupper( ),tolower( )实现。ps:看起来花里胡哨的。

AC代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
	string a,b,c;
	cin>>b>>c;
	int lb=b.size(),lc=c.size();
	for(int i=0;i<lc;i++){
		if(toupper(c[i])>=toupper(b[i%lb])){
			if(c[i]>='A')
			printf("%c",'A'+(c[i]-toupper(b[i%lb])));
			else printf("%c",'a'+(c[i]-tolower(b[i%lb])));
		}
		else {
			if(c[i]>='A')
			printf("%c",c[i]+('Z'-toupper(b[i%lb])+1));
			else printf("%c",c[i]+('z'-tolower(b[i%lb])+1));
		}
	}
	return 0;
}