用了两种方法,两种思想都是先将小写转为大写,之后遍历。
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
void cap(string &s)
{
for(int i = 0; i < s.size(); i++)
if(s[i] >= 'a' && s[i] <= 'z')
s[i] = (char)(s[i]-'a' + 'A');
}
int main()
{
string str1, str2;
while(cin >> str1 >> str2)
{
cap(str1);
cap(str2);
string ans;
for(int i = 0; i < str1.size(); i++)
{
if(str2.find(str1[i]) == -1)
if(ans.find(str1[i]) == -1)
ans += str1[i];
}
cout << ans << endl;
}
return 0;
}
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
void cap(string &s)
{
for(int i = 0; i < s.size(); i++)
if(s[i] >= 'a' && s[i] <= 'z')
s[i] = (char)(s[i]-'a' + 'A');
}
int main()
{
string str1, str2;
bool mark1[27];
bool mark2[10];
while(cin >> str1 >> str2)
{
memset(mark1, 0, sizeof(mark1));
memset(mark2, 0, sizeof(mark2));
cap(str1);
cap(str2);
for(int i = 0; i < str2.size(); i++)
{
if(isalpha(str2[i]))
mark1[str2[i]-'A'] = true;
else if(isdigit(str2[i]))
mark2[str2[i]-'0'] = true;
else //空格
mark1[26] = true;
}
for(int i = 0; i < str1.size(); i++)
{
if(isalpha(str1[i]) && !mark1[str1[i]-'A'])
{
cout << str1[i];
mark1[str1[i]-'A'] = true;
}
else if(isdigit(str1[i]) && !mark2[str1[i]-'0'])
{
cout << str1[i];
mark2[str1[i]-'0'] = true;
}
else if(str1[i] == '_' && !mark1[26])
{
cout << str1[i];
mark1[26] = true;
}
}
cout << endl;
}
return 0;
}