思路一:
将能够输出的在数组中都设为1,那么在s[i]中的,又不是1 的就是坏掉的,
在这道题中的收获 :
1.ascii码上界是256
2.a[b] =1;可以在a数组中将下标为98的元素赋值为1;
代码如下:
#include<iostream> using namespace std; int main() { string s1, s2; //ascii码表上好像最大是256 int a[256]; cin >> s1; cin >> s2; //鄙人认为一开始不能随便转大小写,现在改想法了,反正最后都要输出大写的,可以把s1 s2都转成大写的; for (unsigned int i = 0; i < s2.size(); ++i) { if (s2[i] >= 'a' && s2[i] <= 'z') { s2[i] += 'A' - 'a'; } a[s2[i]] = 1; } for (unsigned int i = 0; i < s1.size(); ++i) { if (s1[i] >= 'a' && s1[i] <= 'z') { s1[i] += 'A' - 'a'; } if (a[s1[i]] != 1) { cout << s1[i]; a[s1[i]] = 1; } } return 0; }
思路二:柳神yyds 学到了两个新的库函数以及返回值的特殊性,有库函数多香香 怎么不用呢
1.find()字符串的寻找函数,若是找不到,返回string::npos,有点神奇
2. toupper()将小写转为大写
3. tolower()将大写转换为小写
#include<iostream> using namespace std; int main() { string s,ss,a; cin >>s>>ss; for (int i = 0; i < s.size(); ++i) { if (s.find(ss[i]) == string::npos&&a.find(ss[i]) == string::npos) { a += toupper(s[i]); } } cout << a; return 0; }