旧键盘上坏了几个键, 于是在敲一段文字的时候, 对应的字符就不会出现. 现在给出应该输入的一段文字, 以及坏掉的那些键, 打出的结果文字会是怎样?
输入格式:
输入在 2 行中分别给出坏掉的那些键, 以及应该输入的文字. 其中对应英文字母的坏键以大写给出; 每段文字是不超过 10?5?? 个字符的串. 可用的字符包括字母 [a-z, A-Z], 数字 0-
9
, 以及下划线 _(代表空格),,,.,-,+(代表上档键). 题目保证第 2 行输入的文字串非空.
注意: 如果上档键坏掉了, 那么大写的英文字母无法被打出.
输出格式:
在一行中输出能够被打出的结果文字. 如果没有一个字符能被打出, 则输出空行.
输入样例:
- 7+IE.
- 7_This_is_a_test.
输出样例:
_hs_s_a_tst
题解: 这道题目和旧键盘那道题非常相似, 都需要标记坏键, 前文中有说过, 标记坏键可以用 map,set 或是自己写一个哈希方法来标记坏键, 这道题我用哈希方法具体给大家展示.
读入两个字符串后, 记录下坏键的位置, 输出时, 若为坏键不输出即可.
代码如下:
- #include<iostream>
- #include<string>
- using namespace std;
- int main()
- {
- bool a[256] = {false};
- string ac, b;
- bool flag = false;
- getline(cin,ac);
- getline(cin,b);
- for( int i = 0; i <ac.length(); i++){
- a[toupper(ac[i])] = true;
- if( ac[i] == '+')
- flag = true;
- }
- for( int i = 0; i < b.length(); i++){
- if( !flag ){
- if(!a[toupper(b[i])]) {
- cout<<b[i];
- }
- }
- else{
- if( b[i]>= 'A' && b[i] <='Z')
- continue;
- if(!a[toupper(b[i])]){
- cout<<b[i];
- }
- }
- }
- return 0;
- }
来源: http://www.bubuko.com/infodetail-2723110.html