永发信息网

数组结构的集合问题

答案:1  悬赏:80  手机版
解决时间 2021-07-20 01:50
  • 提问者网友:嗝是迷路的屁
  • 2021-07-19 13:51

全集:大写字母 ‘A’~’Z’
要求实现以下功能:
1、集合的输入:自动去掉重复和非法的字符
2、集合的显示:输出集合的全部元素
3、输出一个给定集合的补集
4、输出两个给定集合的交集和并集

可以帮我将下面的程序改成动态数组嘛?也就是说可以输入无限个字符,并且输入时以回车结束

#include<iostream.h>
#include "stdlib.h"

class A
{
private:
int size;
char str[25];

char strb[25];
int sizeb;
public:
int mark[25];
A(char s[]);
~A(){};
void bu();
void show();
};

A::A(char s[25])
{

int i=0,j=0;
for(int q=0;q<25;q++)
{mark[q]=0;}
while(s[i]!='*')
{ int k=65;
if((s[i]+1>'A')&&(s[i]-1<'Z'))
{
while(s[i]-k!=0)
{
k++;
}
mark[k-65]=mark[k-65]+1;

if(mark[k-65]<2)
{
str[j]=s[i];
j++;
}
else
mark[k-65]--;
}
i++;
}
size=j;
str[j+1]='*';


}

void A::bu()
{
int p=26;
for(int i=0,j=0;i<p;i++)
{
if(mark[i]!=1)
{
strb[j]='A'+i;
j++;
}
}
sizeb=j;
}
void A::show()
{
cout<<"你输入的集合是:";
for(int i=0;i!=size;++i)
{
cout<<str[i];
}
cout<<endl;
cout<<"你输入的集合的补集是:";
for(i=0;i!=sizeb;++i)
{
cout<<strb[i];
}
cout<<endl;
}

void main()
{
int s,s2;
char mystr3[25];
char mystr4[25];
char mystr[25];
cout<<"请输入一个字符的集合,并以*结束:"<<endl;
cin>>mystr;
A myA(mystr);
myA.bu();
myA.show();
char mystr2[25];
cout<<"请输入另一个字符集合,并以*结束:"<<endl;
cin>>mystr2;
A myA2(mystr2);
myA2.bu();
myA2.show();
for(int i=0,j=0;i<24;i++)
{
if((myA.mark[i]==1)&&(myA2.mark[i]==1))
{
mystr3[j]='A'+i;
j++;
}
s=j;

}
cout<<"这2个集合的交集是:";
for(i=0;i!=s;++i)
{
cout<<mystr3[i];
}
cout<<endl;
cout<<"这2个集合的并集是:";
for(i=0,j=0;i<24;i++)
{
if((myA.mark[i]==1)||(myA2.mark[i]==1))
{
mystr4[j]='A'+i;
j++;
}
s2=j;

}
for(i=0;i!=s2;++i)
{
cout<<mystr4[i];
}
cout<<endl;

}

最佳答案
  • 五星知识达人网友:舍身薄凉客
  • 2021-07-19 15:21

无法解释

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯