c中的字符联盟问题

时间:2012-02-27 16:58:25

标签: c arrays

所以我正在尝试编写一个程序,找到联合,交集,并确定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");
}

1 个答案:

答案 0 :(得分:2)

getunions中,d[i]==TRUE;应为d[i]=TRUE;。你想要一个任务,而不是比较。

顺便说一句,我认为contain函数不正确。 A)它不初始化flag,而B)它表示“b是a的子集”,只要a和b共享至少一个公共元素。