题目描述
题目大意:旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键~
知识点
STL使用
实现
码前思考
- 我使用的是三次遍历来得到最终的结果;
- 需要注意
toupper()
函数的使用,如果不是字母,它会保持原样的字符的~ - 这里我用到了
set
; - 注意要使用大写字母判断呀~
代码实现
//toupper使用
#include <cstdio>
#include <iostream>
#include <string>
#include <set>
using namespace std;
set<char> stA;
string a;
string b;
int main(){
cin>>a;
cin>>b;
int sizeA = a.size();
int sizeB = b.size();
for(int i=0;i<sizeA;i++){
stA.insert(toupper(a[i]));
}
//进行移除
for(int i=0;i<sizeB;i++){
if(stA.find(toupper(b[i]))!= stA.end()){
stA.erase(toupper(b[i]));
}
}
//从头到尾,遍历输出
for(int i=0;i<sizeA;i++){
if(stA.find(toupper(a[i])) != stA.end()){
printf("%c",toupper(a[i]));
stA.erase(toupper(a[i]));
}
}
return 0;
}
码后反思
-
复习了一下
set
的find()、erase()、end()
操作; -
柳神使用的是
find()
函数,但是感觉时间复杂度会有点高啊:#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; }
注意string::npos
表示匹配失败,类似于set
的end()
;