【PAT乙级、C++】1029 旧键盘 (20分)

我真的是有一个不仔细看题的“好习惯”啊

# include <iostream>
# include <unordered_map>

using namespace std;

string S;
string T;

// 在遍历字符串的时候
/* 加上这一句将小写字符转换为大写字符
if(ch >= 'a' && ch <= 'z')
    ch = 'A' + (ch-'a');
*/

int main()
{
    
    
    unordered_map<char, int> mS;
    unordered_map<char, int> mT;
    
    cin >> S >> T;
    for(char ch: S){
    
    
        if(ch >= 'a' && ch <= 'z')
            ch = 'A' + (ch-'a');
        mS[ch]++;
    }
    mT = mS;
    for(char ch: T){
    
    
        if(ch >= 'a' && ch <= 'z')
            ch = 'A' + (ch-'a');
        mT[ch]--;
    }
    
    unordered_map<char, bool> check;  // 检查是否重复
    // 检查mT中的是否有元素的出现此处和mS中一样,一样的话说明这个键肯定坏掉了!!!
    for(char ch: S){
    
    
        if(ch >= 'a' && ch <= 'z')
            ch = 'A' + (ch-'a');

        if(mT[ch] == mS[ch] && check[ch] == false){
    
    
            check[ch] = true;
            cout << ch;
        }
    }
    
    
    return 0;
}

柳神的……妙……

#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;
}

猜你喜欢

转载自blog.csdn.net/MYMarcoreus/article/details/111010762
今日推荐