【PAT乙级】1093 字符串 A+B (20 分) C语言实现

给定两个字符串 A 和 B,本题要求你输出 A+B,即两个字符串的并集。要求先输出 A,再输出 B,但重复的字符必须被剔除。

输入格式:

输入在两行中分别给出 A 和 B,均为长度不超过 10^6 的、由可见 ASCII 字符 (即码值为32~126)和空格组成的、由回车标识结束的非空字符串。

输出格式:

在一行中输出题面要求的 A 和 B 的和。

输入样例:

This is a sample test
to show you_How it works

输出样例:

This ampletowyu_Hrk

华丽的分割线

代码实现:

  1. 解法一:
#include <stdio.h>
#include <string.h>

void get_string(char *pa, int len) {
    // 获取输入的字符串
    fgets(pa, len, stdin);
    if (pa[strlen(pa) - 1] == '\n') {   // 找到 输入字符串 中的最后一个字符
        pa[strlen(pa) - 1] = '\0';      // 如果是回车符,就把它改为 '\0'
    }
}

void pick_unique_char_arr(char *source_arr, char *result_arr, int *index) {
    // 将源数组的元素提取到目标数组中
    int n = *index;

    for (int i = 0; source_arr[i] != '\0'; i++) {
        int isExist = 0;
        for (int j = 0; j < n; j++) {
            if (source_arr[i] == result_arr[j]) {
                isExist = 1;
            }
        }

        if (isExist == 0) {
            result_arr[n] = source_arr[i];
            n++;
        }
    }

    *index = n;
}

int main() {
    char a[1000002], b[1000002];

    get_string(a, 1000002);
    get_string(b, 1000002);

    char result[100] = {'\0'};
    int n = 0;
    pick_unique_char_arr(a, result, &n);
    pick_unique_char_arr(b, result, &n);

    printf("%s\n", result);

    return 0;
}
  1. 解法二:
#include <stdio.h>
#include <string.h>

void get_string(char *pa, int len) {
    // 获取输入的字符串
    fgets(pa, len, stdin);
    if (pa[strlen(pa) - 1] == '\n') {   // 找到 输入字符串 中的最后一个字符
        pa[strlen(pa) - 1] = '\0';      // 如果是回车符,就把它改为 '\0'
    }
}

int main() {
    int len = 1000002;
    char a[len], b[len];

    // 获取输入的字符串
    get_string(a, len);
    get_string(b, len);

    // 字符作为数组下标,数组的值为 1 或 0 辨别当前字符是否重复;若当前字符未重复,则输出。
    int result_arr[256] = {0};
    for (int i = 0; i < strlen(a); i++) {
        // 字符 'a' == 97,隐式转换可能会存在其他问题
        if (result_arr[a[i]] == 0) {
            printf("%c", a[i]);
            result_arr[a[i]] = 1;
        }
    }

    for (int i = 0; i < strlen(b); i++) {
        if (result_arr[b[i]] == 0) {
            result_arr[b[i]] = 1;
            printf("%c", b[i]);
        }
    }

    printf("\n");

    return 0;
}
posted @ 2022-05-26 09:21  夏夜星空晚风  阅读(52)  评论(0编辑  收藏  举报