ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-05-26 09:33:03  阅读:139  来源: 互联网

标签:arr 20 1093 int len C语言 char pa result


给定两个字符串 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;
}

标签:arr,20,1093,int,len,C语言,char,pa,result
来源: https://www.cnblogs.com/wanghuizhao/p/16312222.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有