PAT Basic 1093. 字符串A+B (20) (C语言实现)
题目
给定两个字符串 $A$ 和 $B$ ,本题要求你输出 $A+B$ ,即两个字符串的并集。要求先输出 $A$ ,再输出 $B$ ,但 重复的字符必须被剔除 。
输入格式:
输入在两行中分别给出 $A$ 和 $B$ ,均为长度不超过 $10^6$ 的、由可见 ASCII 字符 (即码值为32~126)和空格组成的、由回车标识结束的非空字符串。
输出格式:
在一行中输出题面要求的 $A$ 和 $B$ 的和。
输入样例:
1
2
This is a sample test
to show you_How it works
输出样例:
1
This ampletowyu_Hrk
思路
用C语言做字符串的题,真是其乐无穷
又到了创建128长度字符数组的时候了:用字符的ascii码作为数组索引是最简单的处理方式。
这道题具体思路就是 逐字符 读取,无需保留整个字符串(长度不超过 10^6 就是为了那些不方便逐字符读取的语言准备的,C语言根本不需要这个限制好吧~)。
读到的字符在ascii数组(就这么叫了)增加个计数,这样下次在读到时,就不做任何事情就好了。
循环控制就是用换行符的数量,读到第二个就退出去。
代码
Github最新代码,欢迎交流
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
int main()
{
char c;
int lines = 0, ascii[128] = {0};
while (lines < 2) {
c = getchar();
if (c == '\n' || c == EOF) {
lines++;
} else if (!ascii[(int)c]) {
putchar(c);
ascii[(int)c]++;
}
}
return 0;
}