所以我正在尝试编写一个程序,找到联合,交集,并确定b是否是输入的两组字符的子集。
所以如果我输入
abcd
表示[]
和
b [] 的 ac
应该打印:
十字路口:ac
union:abcd
“b是”的一个子集。
我的代码大部分都在工作,但是我的union函数没有提供输出。你有修理它的建议吗?我跑了它似乎正在执行,但d不是为某人打印...我的布尔语句错了吗?
我的代码:
#include <stdio.h>
#include "simpio.h"
#include "genlib.h"
#include "strlib.h"
#define n 26
/* typedef enum letters {a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z};
letters letter; */
bool intersection(bool a[], bool b[], bool c[]);
void GetSet(bool set[]);
void init(bool a[]);
void printArray(bool set[]);
void getunions(bool a[], bool b[], bool d[]);
void contain(bool a[], bool b[]);
main()
{
bool a[n], b[n], c[n], d[n];
init(a);
init(b);
init(c); /* intersection */
init(d); /* union */
printf("Entries for a = \n");
GetSet(a);
printf("Entries for b = \n");
GetSet(b);
intersection(a,b,c);
printArray(c);
getunions(a,b,d);
printArray(d);
contain(a,b);
getchar();
}
void init(bool set[])
{
int i;
for(i=0;i<n;i++)
{
set[i]=FALSE;
}
}
void GetSet(bool set[])
{
int i;
string str=GetLine();
int len=StringLength(str);
for(i=0;i<len;i++)
{
set[str[i]-97]=TRUE;
}
}
bool intersection(bool a[], bool b[], bool c[])
{
int i;
for(i=0;i<n;i++)
{
if(b[i]&&a[i]==TRUE) c[i]=TRUE;
}
printf("\n\nThe intersection is\n");
return c;
}
void getunions(bool a[], bool b[], bool d[])
{
int i;
for(i=0;i<n;i++)
{
if(a[i]==TRUE||b[i]==TRUE)
d[i]==TRUE;
}
}
void printArray(bool set[])
{
int i;
for(i=0;i<n;i++)
{
if(set[i])
printf("%c", i+97);
}
}
void contain(bool a[], bool b[])
{
int i;
bool flag;
for(i=0;i<n;i++)
{
if(a[i]&&b[i]) flag=TRUE;
}
if(flag) printf("\n\nb is a subset of a.\n");
else printf("\n\nb is not a subset of a.\n");
}
答案 0 :(得分:2)
在getunions
中,d[i]==TRUE;
应为d[i]=TRUE;
。你想要一个任务,而不是比较。
顺便说一句,我认为contain
函数不正确。 A)它不初始化flag
,而B)它表示“b是a的子集”,只要a和b共享至少一个公共元素。