题目描述
给出两个字符串,将它们进行拼接,拼接过程中每个字符只允许出现一次。
如:两个字符串 𝑠1="𝑎𝑑𝑒𝑎𝑏",𝑠2="𝑓𝑐𝑎𝑑𝑒𝑥"s1="adeab",s2="fcadex" ,那么连接时𝑠1s1 留下 𝑎𝑑𝑒𝑏adeb (第 22 个 𝑎a 出现过了,就不要了),再将 𝑠2s2 连接上来形成 𝑎𝑑𝑒𝑏𝑓𝑐𝑥adebfcx,两个字符串中重复的都过滤掉,但剩余的顺序不要调整。
输入
两行,每行一个只包含小写英文字母的字符串。
输出
一行,连接后的字符串。
样例
输入
复制
abc daaeb
输出
复制
abcde
来源
字符串
标签
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
char s[200],a[200];
char anwer[200];//用来存合并后的字符串
bool b[200];//b是用来看有没有用过
int p=0;//anwer的下标
for(int i=0;i<=200;i++)
{
b[i]=false;//因为b是局部变量,所以将b数组标记为没有用过
}
cin>>s>>a;//输入两个字符串
for(int i=0;s[i]!='\0';i++)//循环,从0开始,因为不知道在哪结束,所以循环到第一个字符串的最后一个
{
if(b[s[i]-'a'+1]==false)//如果b没有用过
//如果s[i]=a,那么'a'-'a'+1就等于b数组的第1位
//如果s[i]=b,那么'b'-'a'+1就等于b数组的第2位
//如果s[i]=c,那么'c'-'a'+1就等于b数组的第3位
//……
{
b[s[i]-'a'+1]=true;//标记为用过
anwer[p]=s[i];//anwer的第i位就等于s[i]
p++;//移动下标,到下一位
}
}
for(int i=0;a[i]!='\0';i++)//循环,从0开始,因为不知道在哪结束,所以循环到第一个字符串的最后一个
{
if(b[a[i]-'a'+1]==false)//如果b没有用过
//如果s[i]=a,那么'a'-'a'+1就等于b数组的第1位
//如果s[i]=b,那么'b'-'a'+1就等于b数组的第2位
//如果s[i]=c,那么'c'-'a'+1就等于b数组的第3位
//……
{
b[a[i]-'a'+1]=true;//标记为用过
anwer[p]=a[i];//anwer的第i位就等于s[i]
p++;//移动下标,到下一位
}
}
anwer[p]='\0';//在anwer的最后一位加结束符,否则不会结束
cout<<anwer;//输出
}