题解 | #字符串加密# C++解法 3ms通过
字符串加密
http://www.nowcoder.com/practice/e4af1fe682b54459b2a211df91a91cf3
#include<iostream> #include<string> #include<algorithm> #include<vector> using namespace std; int main() { string key,ming_s; while(cin>>key>>ming_s) { transform(key.begin(),key.end(),key.begin(),::toupper);//统一转成大写 vector<char> v;//v用于存加key后的字母表 for(int i=0;i<key.size();i++)//先将key插入字母表中 { int j; for(j=0;j<v.size();j++) { if (v[j]==key[i]) break; } if(j==v.size()) v.push_back(key[i]); } int i; for( i=0;i<26;i++)//再插入key以外的字母到字母表中 { int j; for(j=0;j<v.size();j++) { if (v[j]==('A'+i)) break; } if(j==v.size()) v.push_back('A'+i); } for(int m=0;m<ming_s.size();m++)//这里开始将明文转成密文 { int lower_flag=0;//字母小写标志,若小写则为1,并统一转成大写方便和字母表对应 if(ming_s[m]>='a'&&ming_s[m]<='z') { lower_flag=1; ming_s[m]=toupper(ming_s[m]);//统一转成大写方便和字母表对应 } ming_s[m]=v[(ming_s[m]-'A')];//铭文中字母相对‘A’的位置正好是加key字母表中的下标 if(lower_flag) { ming_s[m]=tolower(ming_s[m]);//如果是小写,需要转回小写 } } for(auto x:ming_s) cout<<x; cout<<endl; } }