PAT乙级1029

107 阅读1分钟

image.png 这道题目的就是在于判断字符串1中的每个字母是否在字符串2中出现。如果没有出现,就说明那个按键损坏了。我认为简单的就是使用string的内置find函数。

string中find()返回值是字母在母串中的位置(下标记录),如果没有找到,那么会返回一个特别的标记npos。(返回值可以看成是一个int型的数)

当然你不想使用别人写好的,你可以用一个字符数组分别存字符串1出现的26个字母加数字,然后遍历字符串2找到有没有出现,这就很麻烦啊,我就老老实实使用find好了。

然后是要求字母输入大写,直接全部先换成大写再找,也可以找到了在输出时再换成大写。 推荐函数toupper(c)。

若参数c为小写字母则将该对应的大写字母返回,不须转换则将参数c值返回

//foreverking
//其中英文字母只输出大写,每个坏键只输出一次。题目保证至少有 1 个坏键
#include <vector>
#include <cstdio>
#include <queue>
#include <algorithm>
#include <cstring>
#include <iostream>
#include <cmath>
using namespace std;

string s1,s2,res;

int main(){
    cin >> s1 >> s2;
    //因为他值输出大写,那么小写提前转化为大写
    for(int i = 0; i <= s2.size(); i++){
        //代码
        if(s2[i] >= 'a' && s2[i] <= 'z')
            s2[i] += 'A' - 'a';
        }
    
    for(int i = 0; i <= s1.size(); i++){
        //代码
        if(s1[i] >= 'a' && s1[i] <= 'z')
            s1[i] += 'A' - 'a';

        if(s2.find(s1[i]) == s2.npos && res.find(s1[i]) == res.npos)
            res = res + s1[i];
        }

        cout << res << endl;
        return 0;
    }

题目链接