题目描述
在数学上,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;
}