东方博宜—1105 - 字符串连接

 

题目描述

给出两个字符串,将它们进行拼接,拼接过程中每个字符只允许出现一次。

如:两个字符串 𝑠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;//输出
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值