乙级pat 1033 旧键盘打字

探讨如何在旧键盘部分按键失效的情况下,正确输出一段给定的文本,涉及到字符串操作和条件判断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样?

输入描述:
输入在2行中分别给出坏掉的那些键、以及应该输入的文字。其中对应英文字母的坏键以大写给出;每段文字是不超过10^5个字符的串。可用的字符包括字母[a-z, A-Z]、数字0-9、以及下划线“_”(代表空格)、“,”、“.”、“-”、“+”(代表上档键)。题目保证第2行输入的文字串非空。
注意:如果上档键坏掉了,那么大写的英文字母无法被打出。

输出描述:
在一行中输出能够被打出的结果文字。如果没有一个字符能被打出,则输出空行。

输入例子:
7+IE.
7_This_is_a_test.

输出例子:
_hs_s_a_tst
补充:

  1. 只要是字符串a中出现的在字符串b中一律删除(字母无论大小写均删除)。
  2. 在输入的时候,应当允许输入空格,否则测试点2会出现错误,所以应当采用getline(cin,string)。
  3. 注意“+”上档键,当上档键出现时,输出中不允许有大写字母。

源代码:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std; 
int main(int argc, char** argv) {
 string a,b;
 getline(cin,a);
 getline(cin,b);
 int count=0,num=0;
 int alength=a.length();
 int blength=b.length(); 
   //只要是字符串a中出现的在字符串b中一律删除(无论字母大小写)
   for(int i=0;i<alength;i++){
       if(a[i]>='A'&&a[i]<='Z'){
       b.erase(remove(b.begin(),b.end(),a[i]),b.end());
       b.erase(remove(b.begin(),b.end(),a[i]+32),b.end()); 
 }
       else 
       b.erase(remove(b.begin(),b.end(),a[i]),b.end());
}
//如果删除后的字符串b为空 
 if(b.empty()){
  cout<<endl;
 }
 else{
//输出时如果a中出现了'+'则不输出大写 
for(int i=0;i<alength;i++){
 if(a[i]=='+'){
 count++;
 break;
 }
} 
 if(count==0){
 cout<<b;
 }
 else{
 for(int j=0;j<b.length();j++){
  if(!(b[j]>='A'&&b[j]<='Z'))
  cout<<b[j];
 } 
 } 
 return 0;
 }  
}
/*
7+IE.
7_This_is_a_test.
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值