上机训练实战指南-PAT Advance1084

题目链接

这是一个简单题, 用map做比较简单

#include <bits/stdc++.h>
using namespace std;

set<char> s;
map<char, int> mapp;
map<char, int> mapp2;
int main() {
	string a, b;
	cin >> a >> b;
	for (int i = 0; i < a.size(); i++) {
		bool f = 1;
		if (mapp[a[i]] != 1) {
			for (int j = 0; j < b.size(); j++) {
				if (a[i] == b[j]) f = 0;
			}
			if (f == 1) {
				char q = toupper(a[i]);
				if (mapp2[q] != 1) {
					cout << q;
					mapp2[q] = 1;
				} 
				mapp[a[i]] = 1;
			}
		}
	}
	return 0;
}

再来看一下更简单的解法:
这个学到的是string::npos这个用法,当在一个string串里查找不到指定字符的时候会返回一个string::npos.

#include <iostream>
#include <cctype>
using namespace std;
int main() {
	string s1, s2, ans;
	cin >> s1 >> s2;
	for (int i = 0; i < s1.length(); i++)
		if (s2.find(s1[i]) == string::npos && ans.find(toupper(s1[i])) ==
		        string::npos)
			ans += toupper(s1[i]);
	cout << ans;
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值