一【题目难度】
- 乙级
二【题目编号】
- 1093 字符串A+B (20 分)
三【题目描述】
- 给定两个字符串 A A A 和 B B B,本题要求你输出 A + B A+B A+B,即两个字符串的并集。要求先输出 A A A,再输出 B B B,但重复的字符必须被剔除。
四【题目示例】
-
输入格式:
输入在两行中分别给出 A A A 和 B B B,均为长度不超过 1 0 6 10^6 106的、由可见 A S C I I ASCII ASCII 字符 (即码值为 32 126 32~126 32 126)和空格组成的、由回车标识结束的非空字符串。 -
输出格式:
在一行中输出题面要求的 A A A 和 B B B 的和。 -
输入样例:
This is a sample test
to show you_How it works -
输出样例:
This ampletowyu_Hrk
五【解题思路】
- 当我们理解题意之后就能发现思路很简单,首先想到散列数组,因为是并集,所以每个字符只能出现一次,又要按照顺序输出,所以先处理 A A A,如果出现过就不输出,否则输出,并且标记已输出,后面同理处理 B B B即可。有一个点需要注意,要用 g e t s ( ) gets() gets()函数扫描输出,不要用 s c a n f ( ) scanf() scanf()函数,因为有空格可能会漏掉导致结果出错
六【最终得分】
- 20分
七【代码实现】
#include<stdio.h>
#include<string.h>
int main()
{
char A[1000001],B[1000001];
gets(A);
gets(B);
int lenA = strlen(A),lenB = strlen(B),com[129] = {0};
for(int i = 0;i<lenA;i++)
{
char temp = A[i];
if(com[temp] == 0)
{
printf("%c",temp);
com[temp] = 1;
}
else
{
continue;
}
}
for(int i = 0;i<lenB;i++)
{
char temp = B[i];
if(com[temp] == 0)
{
printf("%c",temp);
com[temp] = 1;
}
else
{
continue;
}
}
return 0;
}