Programmino in C

di il
2 risposte

Programmino in C

Buongiorno!! avrei bisogno di una mano su un progr molto semplice che date 2 stringhe letterali in input, mi sputa fuori una terza stringa che contiene tutte le lettere che la prima stringa non ha in comune con la seconda:

es.: a[]="militare" b[]="mare" ---------------> c[]="ilit"

credo di aver compreso bene il programma in quello che deve fare, però quando compilo il codice che vi riporto sotto mi fa una cosa strana:
#include<stdio.h>
#include<ctype.h>
#define MAX 300

int len(char*s)
{
    int i=0;
    while(s[i]!='\0')
        i++;
    return i;
}

void differenza(char*a, char*b, char*c)
{
    int i,j,k,u,cont,t=0;

    for(i=0;i<len(a);i++)
        {
            a[i]=tolower(a[i]);
        }
    for(i=0;i<len(b);i++)
        {
            b[i]=tolower(b[i]);
        }
    //printf("%s\n",a);
    //printf("%s\n",b);

    for(i=0;i<len(a);i++)
        {
            if(isalpha(a[i])==0)
                printf("\nERROR\n");
        }

    for(i=0;i<len(b);i++)
        {
            if(isalpha(b[i])==0)
                printf("\nERROR\n");
        }

    if(a[0]=='\0')
        {
            c[0]='\0';
            printf("La stringa a e' nulla e anche la c:\n%s",c);
        }
    if(b[0]=='\0')
        {
            printf("La stringa c e' uguale alla a:\n%s",a);
        }


    for(u=0;u<len(a);u++)
        {
            cont=0;
            for(k=0;k<len(b);k++)
                {
                    if(a[u]==b[k])
                        cont++;
                }
            if(cont==0)
                {
                    c[0+t]=a[u];
                    t++;
                }

        }
    printf("La stringa c diventa:\n%s",c);
}

main()
{
    char a[MAX], b[MAX], c[MAX];
    int i;
    printf("inserisci la stringa a (digita 0 se vuoi inserire una stringa nulla):\n");
    scanf("%s",a);
    if(a[0]=='0' && len(a)==1)
        a[0]='\0';

    printf("inserisci la stringa b (digita 0 se vuoi inserire una stringa nulla):\n");
    scanf("%s",b);
    if(b[0]=='0' && len(b)==1)
        b[0]='\0';

    printf("Si e' inserito rispettivamente \"%s\" e \"%s\".\n", a, b);
    differenza(a,b,c);
    return 0;
}

Ore se digito "mari" e poi "orme" mi da come output:
ai(più una serie di caratteri speciali di cui alcuni mai visti)
dove sbaglio?? grazie per la dritta

2 Risposte

  • Re: Programmino in C

    Il problema da quanto mi pare di aver capito, è nell'assegnazione dei caratteri dalla stringa a[] alla c[] ! cioè è t che mi fa sballare il programma.. credo di dovergli dire quando fermarsi e assegnargli un valore finale t='\0' ma perché??
  • Re: Programmino in C

    Devi assegnare come valore finale "\0" perché se no la stringa rimane sporca...
    Per esempio se tu hai questa stringa => "pippo" e poi durante il programma gli scrivi sopra la stringa => "ciao" in pratica tu vai a sovrascrive le prime 4 posizioni della stringa ma l'ultima rimane sporca e quindi a video ti stamperà "ciaoo" più una successione di caratteri strani (alcuni di loro fanno quasi venire i brividi a chi la prima volta che gli successe una cosa di questa era alle prime armi) e non ti faranno avere il risultato sperato...
    quindi alla fine metti il carattere terminatore di stringa e te ne esci comodo comodo
Devi accedere o registrarti per scrivere nel forum
2 risposte