/* Definizione e uso di insiemi di caratteri (unione e intersezione)  */
#include <stdio.h>
#include <string.h>

typedef short alfa[26];

int main(){
    char s1[20], s2[20], s3[20];
    alfa i1, i2, i3;
    int i;

    for(i=0; i<26; i++) {
        i1[i]=0;
        i2[i]=0;
        i3[i]=0;
    } 
    printf("Inserire una stringa: ");
    scanf("%s", s1);
    printf("Inserire una stringa: ");
    scanf("%s", s2);
    printf("Inserire una stringa: ");
    scanf("%s", s3);
    
    printf("s1=%s s2=%s s3=%s\n", s1, s2, s3);

    /* set corrispondenti */
    for(i=0; i<strlen(s1); i++){
        printf("s1[%d]=%c -> %c-'a'=%d\n", i, s1[i], s1[i], s1[i]-'a');
        i1[s1[i]-'a']=1;
    }
    printf("Insieme 1: ");
    for(i=0; i<26; i++)
        printf("%d ", i1[i]);
    printf("\n");  
    for(i=0; i<strlen(s2); i++)
        i2[s2[i]-'a']=1;
    for(i=0; i<strlen(s3); i++)
        i3[s3[i]-'a']=1;

    /* stampa insieme */
    printf("Insieme 1: ");
    for(i=0; i<26; i++)
        if (i1[i]!=0) printf("%c",'a'+i);
    printf("\n");
    printf("Insieme 2: ");
    for(i=0; i<26; i++)
        if (i2[i]!=0) printf("%c",'a'+i);
    printf("\n");
    printf("Insieme 3: ");
    for(i=0; i<26; i++)
        if (i3[i]!=0) printf("%c",'a'+i);
    printf("\n");

    /* Unione di i1 e i2: i1 = i2 || i1 */
    for(i=0; i<26; i++)
        i1[i] = i1[i] || i2[i];
    printf("Insieme 1 unito con Insieme 2: ");
    for(i=0; i<26; i++)
        if (i1[i]!=0) printf("%c",'a'+i);
    printf("\n");
    printf("Insieme 1: ");
    for(i=0; i<26; i++)
        printf("%d ", i1[i]);
    printf("\n");  

    /* Intersezione di i1 e i3: i1 = i1 && i3 */
    for(i=0; i<26; i++)
        i1[i] = i1[i] && i3[i];
    printf("(Insieme 1 + Insieme 2) intersezione Insieme 3: ");
    for(i=0; i<26; i++)
        if (i1[i]!=0) printf("%c",'a'+i);
    printf("\n");
    printf("Insieme 1: ");
    for(i=0; i<26; i++)
        printf("%d ", i1[i]);
    printf("\n");  

    return 0;
}

