P1093 字符串A+B

1093 字符串A+B (20分)
 

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

输入格式:

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

输出格式:

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

输入样例:

This is a sample test
to show you_How it works
 

输出样例:

This ampletowyu_Hrk

 

我战战兢兢 的 写了一个  while (~scanf("%c", &ch))  ,居然还真的A了,つ﹏⊂,我拿了一个128大小的数组当作去重的数组,凡是输入过的字符都会被标记,第二次输入的时候都会被跳过,不过需注意的是 '\0' 和 '\n' 需要特殊处理,要不然就有可能会出现输出不完全的情况或者换行输出的情况。还有就是记得给字符数组初始化,要不然就得一个个%c输出,不过这种代码没多大通用性

#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 1000000

int main(void)
{
    char ch;
    int count = 0;
    int flag[128] = {1};
    char str[MAX_SIZE] = {0};

    flag[(int)'\n'] = 1;
    while (~scanf("%c", &ch))
    {
        if (flag[(int)ch])
        {
            continue;
        }
        flag[(int)ch] = 1;
        str[count++] = ch;
    }

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

    return 0;
}

2020-02-15 11:36:51更新:

好吧,我觉得这样子更U•ェ•*U一点

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int flag[128] = {0};
    char c;
    for (int i = 0; i < 2; i++)
    { //两个字符串,所以循环两次
        while ((c = getchar()) != '\n')
        { //用输入是否为'\n'来判断字符串输入是否结束
            if (flag[(int)c] == 0)
            {
                flag[(int)c] = 1;
                printf("%c", c);
            }
        }
    }
    return 0;
}

干脆,数组也不要,直接裸奔,跑完就输出完了。(完了我又想到RTT了)

PAT不易,诸君共勉!

posted @ 2020-02-15 11:35  秦_殇  阅读(239)  评论(0编辑  收藏  举报