PAT散列题---1033 旧键盘打字 (20分)

  • 测试点2有个坑就是不能用cin来输入字符
  • 题目保证第二行输入非空,第一行可能是空,cin读不了空字符
#include<iostream>
#include<vector>
#include<cctype>
#include<algorithm>
#include<sstream>
#include<string>
#include<cstdio>

using namespace std;


int main() {
	string a,b;
	getline(cin,a);
	getline(cin,b);
	int str[200]={0};
	bool ans=true;
	if(a.find('+')!=string::npos) ans=false;
	for(int i=0;i<a.size();i++){
		if(ans){
			char x=toupper(a[i]);
			str[x]=1;
		}else{
			char x=tolower(a[i]);
			str[x]=1;
		}
	}
	if(ans){
		for(int i=0;i<b.size();i++){
		char x=toupper(b[i]);
		if(!str[x]) cout<<b[i];
		}
	}else{
		for(int i=0;i<b.size();i++){
		if(isupper(b[i])) continue;
		char x=tolower(b[i]);
		if(!str[x]) cout<<b[i];
		}
	}
	return 0;
}

附上柳诺小姐姐的代码,好简洁哈

#include <iostream>
#include <cctype>
using namespace std;
int main() {
  string bad, should;
  getline(cin, bad);
  getline(cin, should);
  for (int i = 0; i < should.length(); i++) {
    if (bad.find(toupper(should[i])) != string::npos) continue;
    if (isupper(should[i]) && bad.find('+') != string::npos) continue;
    cout << should[i];
  }
  return 0;
}
原文地址:https://www.cnblogs.com/bingers/p/13091029.html