如果使用大小写转换函数,显得更整洁、更不容易出错。
toupper将小写字母转化为大写字母;
tolower将大写字母转化为小写字母。
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
string key;
string str;
while (cin >> key)
{
//保证key原来字母顺序不变的情况下,进行去重;
for (int i = 0; i < key.length()-1; i++)
{
for (int j = i+1; j < key.length(); j++)
{
if (key[i] == key[j])
{
key[j] = '0';
}
}
}
for (int i = 0; i < key.length(); i++)
{
if (key[i] == '0')
{
key.erase(key.begin()+i);
i = i - 1; //因为erase函数删除一个元素后,后续的字符都向前移动了一个位置
//所以i的值减去1(i++会加回来),才能保证下次是从删除的那个字符的下一个字符开始判断
}
}
//将去重后的单词放入字母表中
string letter2="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
string letter3="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for (int i = 0; i < key.length(); i++)
{
if (key[i] >= 'a' && key[i] <= 'z')
{
key[i] = key[i] - 32;//key数组所有字母转换为大写字母
}
}
for (int i = 0; i < key.length(); i++)
{
letter2[i] = key[i];
}
// cout << endl;
for (int i = 0,j= key.length(); i < 26; i++)
{
if (key.find(letter3[i]) == string::npos)
{
letter2[j++] = letter3[i]; //进行加密
}
}
//输入要加密的字符串进行处理
cin >> str;
vector<int> save;
vector<int> flag;
for (int i = 0; i < str.length(); i++)
{
if (str[i] >= 'a' && str[i] <= 'z')
{
str[i] -= 32;
flag.push_back(1);
}
else
flag.push_back(0);;
if (letter3.find(str[i]) != string::npos)
{
save.push_back(letter3.find(str[i]));
}
}
for (int i = 0; i < save.size(); i++)
{
if (flag[i]==1)
{
// letter2[save[i]] += 32;
letter2[save[i]] = tolower(letter2[save[i]]);
cout << letter2[save[i]];
}
else
cout << letter2[save[i]];
}
cout << endl;
}
return 0;
}