集合运算(并集交集差集)

题目描述

在数学上,2个集合A和B之间的运算一般有并集、差集、交集,分别记作A+B、A-B、A*B。本题要求设计一款模拟集合运算的游戏程序,已知所有集合的元素都是小写字母,集合的输入、输出用字符串表示。例如集合A={a b d e},输入输出用字符串"abde"表示。现在输入n个集合运算式,求运算结果。例如,运算式abcd-bckg,那么结果为ad。

输入

第1行一个正整数n,表示有多少运算式, 1<=n<=100。
下面n行,每行一个运算式。运算符号一定是+、-、*之一,运算符号两边各有一个空格隔开。

输出

共n行,对应输入的运算结果。

输入

2
abcd + bcefg
abcd * bcefg
Sample Input

输出

abcdefg
bc
 

详细代码:

#include<iostream>//出入输出头文件 
#include<cstring>//字符串头文件 
using namespace std;
void q(char a[],char s[],char b[])//判断运算符函数 
{
	if(s[0]=='+')//如果是加法 
	{
		for(int i=0;i<strlen(a);i++)//循环字符串a 
			for(int j=0;j<strlen(b);j++)//循环字符串b
				if(a[i]==b[j])b[j]='0';//如果a,b都有的字符,b中的字符=0 
		strcat(a,b);//把b复制到a的后面 
		for(int i=0;i<=strlen(a)+strlen(b);i++)//输出字符串a中所有不带0的字符 
			if(a[i]!='0')cout<<a[i];//输出
		cout<<endl;//换行 
		return;//返回 
	if(s[0]=='-')//如果是减法 
	{
		for(int i=0;i<strlen(a);i++)//循环字符串a 
			for(int j=0;j<strlen(b);j++)//循环字符串b 
				if(a[i]==b[j])a[i]='0';//如果a,b都有的字符,a中的字符=0 
		for(int i=0;i<=strlen(a);i++)//输出字符串a中所有不在b字符串带里的字符 
			if(a[i]!='0')cout<<a[i];//输出
		cout<<endl;//换行
		return;//返回
	}
	if(s[0]=='*')//如果是乘法 
	{
		for(int i=0;i<strlen(a);i++)//循环字符串a 
			for(int j=0;j<strlen(b);j++)//循环字符串b
				if(a[i]==b[j])cout<<a[i];//如果a,b都有的字符,那就输出 
		cout<<endl;//换行 
		return;//返回 
	}
}
int main()
{
	int n;//运算次数 
	char a[1001][1001],b[1001][1001],s[1001][1];//字符串a,字符串b,运算符c 
	cin>>n;//输入 
	for(int i=1;i<=n;i++)scanf("%s %c %s",a[i],&s[i],b[i]);//输入各个算式 
	for(int i=1;i<=n;i++)q(a[i],s[i],b[i]);//执行函数 
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值