2012-02-27 6 views
-1

したがって、私は、連合、交差点を見つけて、bが入力された2グループの文字のサブセットであるかどうかを判断するプログラムを書こうとしています。私は[] Bのcの連合文字プログラムの問題

を[]

acため

abcdを入力した場合

だから、それは印刷する必要があります:

交差点:AC

共用体:abcd

"bはaのサブセットです"。

私のコードは大部分のために働いていますが、私のユニオン関数は出力を与えていません。それを修正するための提案はありますか?私はそれを実行し、実行されているようだが、dは誰かのために印刷されていない...私のブールステートメントが間違っている?

マイコード:getunions

#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"); 
} 

答えて

2

d[i]==TRUE;d[i]=TRUE;でなければなりません。あなたは割り当てではなく比較をしたい。

脇に、私はcontain機能が間違っていると思います。 A)それはflagを初期化せず、B)aとbが少なくとも1つの共通要素を共有している限り、 "bはaの部分集合です"と言います。