1033 旧键盘打字 (20分)
感觉自己写复杂了……
说说自己碰到的坑吧
1.以为, . - +都是上档键
2.题目只保证了第二行非空,第一行空的时候cin不行,所以必须要用getline
3.题目说如果没有一个字符能被打出,则输出空行。我开始不知道什么意思,就输出了一个空格,后来提示格式不对,就输出了一个换行符
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
#include <string>
using namespace std;
int main()
{
string s1, s2;
//s1可能为空
getline(cin, s1);
cin >> s2;
bool upper = true;
//初始化数字,字母,下划线,上档线
map<char, bool> s;
for (int i = 0; i < 10; i++)
{
s['0' + i] = true;
}
for (int i = 0; i < 26; i++)
{
s['a' + i] = true;
s['A' + i] = true;
}
s['_'] = true;
s[','] = true;
s['-'] = true;
s['+'] = true;
s['.'] = true;
for (int i = 0; i < s1.size(); i++)
{
s[s1[i]] = false;
if (s1[i]>='A' && s1[i]<='Z')
{
s[s1[i]+32] = false;
}
if (s1[i] >= 'a' && s1[i] <= 'z')
{
s[s1[i] - 32] = false;
}
}
if (!( s['+']))
{
upper = false;
for (int i = 0; i < 26; i++)
{
s['A' + i] = false;
}
}
vector<char> result;
for (int i = 0; i < s2.size(); i++)
{
if (s[s2[i]])
{
result.push_back(s2[i]);
cout << s2[i];
}
}
if (result.size()==0)
{
cout << endl;
}
return 0;
}