C++
坑真多
思路:对于字符串映射由原先的
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
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
改为
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
T R A I L B Z E S C D F G H J K M N O P Q U V W X Y
即把给定的密钥去重后,把密钥中的字符从序列[A-Z]中挪到最前面。
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main()
{
string str1, str2;
while(cin >> str1)
{
getchar();
getline(cin, str2);
string oldEncryp, newEncryp;
for(unsigned c = 'A'; c <= 'Z'; ++c)
{
oldEncryp += c;
}
for(auto &c: str1)
{
c = toupper(c);
if(newEncryp.find(c) == string::npos)
{
newEncryp += c;
oldEncryp.erase(oldEncryp.find(c), 1);
}
}
newEncryp += oldEncryp;
for(auto &c : str2)
{
if(c >= 'a' && c <= 'z')
{
c = newEncryp[c - 'a'] - 'A' + 'a';
}
else if(c >= 'A' && c <= 'Z')
{
c = newEncryp[c - 'A'];
}
}
cout << str2 << endl;
}
return 0;
}


京公网安备 11010502036488号