1093 字符串A+B (20 分)
给定两个字符串 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
本来gets函数用的开开心心,现在PTA交上去编译错误,只能自己写一个块来代替这个gets函数了
#include<stdio.h>
bool search(char ch,char *str,int count)//找到返回真,否则假
{
int i;
for(i=0;i<count;i++)
{
if(str[i]==ch)
return true;
}
return false;
}
int main()
{
char str1[1000001],str2[1000001];
char str[100]; //因为这个是由可见字符串和空格组成,长度不会超过126-32+1+1
char *p1=str1,*p2=str2;
int count=0;
int i;
char c;
while(1)
{
scanf("%c",&c);
if(c=='\n') //不是结尾符
break;
else
{
*p1=c;
}
p1++;
}
*p1='\0';//加上结尾符号
p1=str1; //p1重新指向str1
while(1)
{
scanf("%c",&c);
if(c=='\n')
break;
else
{
*p2=c;
}
p2++;
}
*p2='\0';
p2=str2; //p1重新指向str1
while(*p1!='\0')
{
if(!(search(*p1,str,count)))//在里面没有找到 那么紧接着插入这个字符
{
str[count++]=*p1;
}
p1++;
}
while(*p2!='\0')
{
if(!(search(*p2,str,count)))//在里面没有找到 那么紧接着插入这个字符
{
str[count++]=*p2;
}
p2++;
}
str[count]='\0';//加上结尾符
printf("%s",str);
}