Consiglio piccolo programmino in c

di il
17 risposte

17 Risposte - Pagina 2

  • Re: Consiglio piccolo programmino in c

    Mi posti tutto il codice che ci do un'cchiata.
  • Re: Consiglio piccolo programmino in c

    Ho modificato il codice iniziale, questo funziona.

    Adesso penso sia istruttivo per te modificarlo e anziché utilizzare il ciclo per la scansione della lista, che aggiunge un elemento in coda, modifichi la lista mettendoci una struct con un puntatore alla testa e uno alla coda, modifichicando le funzioni di accesso in particolar modo quella relativa all'inserimento in coda.
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define STRLUN 41
    
    
    typedef struct nodoL* listaN;
    
    typedef struct nodoL {
        char s[STRLUN];
        listaN next;
    } nodoL;
    
    
    
    /** Prototipi delle funzioni */
    int palindroma(char * );
    
    /** Prototipi delle funzioni gestione lista */
    listaN creaNodo(char * );
    listaN AddLista(listaN , char * );
    void StampaLista(listaN );
    
    
    int main() {
        printf("Inserire intero: ");
        int n;
        int i;
        char str[STRLUN];
        fgets(str, STRLUN, stdin);
        n = atoi(str);
        listaN P = NULL;
        listaN N = NULL;
        for(i=0; i<n; i++) {
            printf("Inserire stringa: ");
            fgets(str, STRLUN, stdin);
            if(palindroma(str)==0)
                P = AddLista(P, str);
            else
                N = AddLista(N, str);
        }
        printf("\nStringhe NON Palindrome\n");
        StampaLista(N);
        printf("\nStringhe Palindrome\n");
        StampaLista(P);
        return 0;
    }
    
    
    /** Definizioni delle funzioni */
    int palindroma(char *s1) {
        int l = strlen(s1);
        char *s2 = malloc(l*sizeof(char *));
        int j = l-2, i = 0;
        strcpy(s2,s1);
        while(s1[i]!='\0'&&j>=0) {
            if(s1[i]!=s2[j])
                return 1;
            j--;
            i++;
        }
        return 0;
    }
    
    /** Definizioni delle funzioni gestione lista */
    listaN creaNodo(char * s1) {
        int i;
        listaN nodo = malloc(sizeof(*nodo));
        for(i=0; s1[i]!='\0'; i++)
            nodo->s[i] = s1[i];
        nodo->next = NULL;
        return nodo;
    }
    
    listaN AddLista(listaN lista, char *str) {
        listaN t;
        t = lista;
        if(lista==NULL)
            lista = creaNodo(str);
        else {
            while(t->next!=NULL)
                t = t->next;
            t->next = creaNodo(str);
        }
        return lista;
    }
    
    void StampaLista(listaN list) {
        listaN p = list;
        while(p!=NULL) {
            printf("%s", p->s);
            p = p->next;
        }
        return;
    }
    
    
  • Re: Consiglio piccolo programmino in c

    Va bene, ti ringrazio tanto, sei stato veramente di grande aiuto!:)
Devi accedere o registrarti per scrivere nel forum
17 risposte