PTA刷题Basic篇——1029.旧键盘——Day(15)

在这里插入图片描述
找出在第一个字符串中出现而在第二个字符串中未出现的字符,字母为大写,且相同字母出现一次。

题目分析

我们使用一个特殊的技巧。分别输入了第一个字符串和第二个字符串之后。我们开辟一个数组,长度为200(等下解释),并全部初始化为0。然后我们遍历第二个字符串,将每一个字符转化为其对应的大写字母,并将这个值作为索引index,将a[index]设为1。
由于字符的ASCII码不超过200,所以我们一开始声明的数组长度为200.
然后我们再遍历第一个字符串中的每一个字符,以相同的方法将对应index的值-1,则如果在字符串1中出现的而在字符串2中未出现,则对应值为-1,否则为0.
最后我们只需要遍历数组中值为-1的字符并输出即可。

代码

#include<iostream>
#include<cstdio>
#include<ctype.h>
#include<string>
using namespace std;
int main(){
    int a[200]={0};
    string str1,str2;
    cin>>str1>>str2;
    int l1=str1.length();
    int l2=str2.length();
    for(int i=0;i<l2;i++)
    {
        a[toupper(str2[i])]++;
    }
    for(int i=0;i<l1;i++)
    {
        a[toupper(str1[i])]--;
        if(a[toupper(str1[i])]==-1)
            printf("%c",toupper(str1[i]));//注意输出形式,不能用cout输出
            //而且如果这里用cout,不用printf指示输出%c的话会输出字符对应的ASCII
    }
    return 0;
}

答题用时14min
Q29——finish√

发布了60 篇原创文章 · 获赞 2 · 访问量 1047

猜你喜欢

转载自blog.csdn.net/weixin_44755413/article/details/105678836