Kirarrr

导航

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

posted on 2019-01-28 23:27  Kirarrr  阅读(140)  评论(0编辑  收藏  举报