PAT B1029

Posted kirarrr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT B1029相关的知识,希望对你有一定的参考价值。

#PAT B1029

这道题主要有两个问题需要解决:

  • 如何在不区分大小写的情况下判断第一个字符串中有哪些字符串没有在第二个中出现
  • 如何确保同一个字符(不区分大小写)只输出一次,且英文均用大小写输出

解决步骤

  1. 对于枚举c1 c2 ,如果是小写字母,则先转换成大写字母,再进行对比。如果相等,说明这个字符在第二行字符中出现过,不予输出。如果不等,则继续枚举,如果c1无法在第二行字符串中找到相等的字符串,则将c1输出。
  2. 对于第二个问题,我们设置一个bool型hashTable[128]来表示字符是否已经输出。

注意事项

  • 空格也作为需要判断的字符串
  • 大小写不区分,且小写需要转换成大写形式
  • hashTable的大小只要能把题目给出的字符串包括即可,我们用ascii码的个数128为其数组长度
#include <cstdio>
#include <cstring>

int main() {
    char str1[100], str2[100];
    bool hashTable[128] = {false};
    fgets(str1, 100, stdin);
    fgets(str2, 100, stdin);
    int len1 = strlen(str1);
    int len2 = strlen(str2);
    for (int i = 0; i < len1; i++) {
        int j;
        char c1, c2;
        for (j = 0; j < len2; j++) {
            c1 = str1[i];
            c2 = str2[j];
            if (c1 >= ‘a‘ && c1 <= ‘z‘) c1 -= 32;
            if (c2 >= ‘a‘ && c2 <= ‘z‘) c2 -= 32;
            if (c1 == c2) break;
        }
        if (j == len2 && hashTable[c1] == false) {
            printf("%c", c1);        //在第二个字符串中未出现c1,且c1未被输出过
            hashTable[c1] = true;
        }
    }
    return 0;
}

以上是关于PAT B1029的主要内容,如果未能解决你的问题,请参考以下文章

PAT-乙级-1049 数列的片段和

PAT Basic 1049

PAT 数列的片段和简单数论

PAT乙级1049 数列的片段和 (20 分)

PAT 乙级 1049 数列的片段和

PAT1049-----枚举法,找规律题,注意降低时间复杂度