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不易,诸君共勉!
大道五十,天衍四九,人遁其一!