1033 旧键盘打字 (20分)

这道题很坑的一点就是,有可能坏掉的键盘是空串(所有的键都是好的),如下测试用例

input
NULL
abcdefg

output
abcdefg

所以,用字符串数组的不能直接用scanf("%s",str);读入,用string的也不能直接用cin读入

分别改为用cin.getline(str,length);和getline(cin,str)就好啦

本蒻姬代码又臭又长

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int vis[100],vis2[20],vis3[10];
int main() {
	bool flag=0;
	int length1,length2;
	string broken,input;
	getline(cin,broken);
	getline(cin,input);
	length1=broken.length();
	length2=input.length();
	for(int i=0; i<length1; i++) {
		if(broken[i]>='a'&&broken[i]<='z') {
			vis[broken[i]-'a']=1;
		} else if(broken[i]>='A'&&broken[i]<='Z') {
			vis[broken[i]-'A']=1;
		} else if(broken[i]>='0'&&broken[i]<='9') {
			vis2[broken[i]-'0']=1;
		} else if(broken[i]=='_') vis3[0]=1;
		else if(broken[i]==',') vis3[1]=1;
		else if(broken[i]=='.') vis3[2]=1;
		else if(broken[i]=='-') vis3[3]=1;
		else if(broken[i]=='+') vis3[4]=1;
	}
	for(int i=0; i<length2; i++) {
		if(input[i]>='0'&&input[i]<='9') {
			if(!vis2[input[i]-'0']) printf("%c",input[i]);
		}  else if(input[i]>='a'&&input[i]<='z') {
			if(vis[input[i]-'a']) continue;
			printf("%c",input[i]);
		} else if(input[i]>='A'&&input[i]<='Z') {
			if(vis[input[i]-'A']) continue;
			if(!vis3[4]) printf("%c",input[i]);
		} else if(input[i]=='_') {
			if(!vis3[0]) printf("_");
		} else if(input[i]==',') {
			if(!vis3[1]) printf(",");
		} else if(input[i]=='.') {
			if(!vis3[2]) printf(".");
		} else if(input[i]=='-') {
			if(!vis3[3]) printf("-");
		} else if(input[i]=='+'){
			if(!vis[4]) printf("+");
		}
	}

	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值