思路
两个字符串分别用string ori, test保存下来。map<string, int>vis标记该字符是否已经在ori出现过,vector values来保存ori中出现过的字符,map<string, int>appear来记录test中该字符是否出现过。
注意
1.题目要求字符大小写都当做大写处理:则c若为小写字符(c >= ‘a’ && c <= ‘z’),c -= 32则可转换为大写
代码
#include <iostream>
#include<cstdio>
#include<map>
#include<queue>
#include<string>
#include<algorithm>
#include<vector>
using namespace std;
typedef long long ll;
const int maxn = 100000 + 5;
map<char, int> appear, vis;
vector<char> values;
int main(){
string ori, test;
cin>>ori>>test;
for(int i = 0; i < ori.size(); i++){
char c = ori[i];
if(ori[i] >= 'a' && ori[i] <= 'z')
c -= 32;//小写转大写
if(vis[c] == 0) values.push_back(c);
vis[c] = 1;
}
for(int i = 0; i < test.size(); i++){
char c = test[i];
if(test[i] >= 'a' && test[i] <= 'z'){
c -= 32;
}
appear[c] = 1;
}
for(int i = 0; i < values.size(); i++){
char c = values[i];
if(appear[c] == 0){
printf("%c", c);
}
}
return 0;
}