Errore strcmp

di il
40 risposte

40 Risposte - Pagina 3

  • Re: Errore strcmp

    Ma io nella stampa richiedo che vengano stampati prima i figli sinistri perchè più piccoli..
    è una visita inorder di un abr...
    per cui i voglio che le stringhe alfabeticamente minori siano inserite a sinistra..
    per l'ordine che noi abbiamo dato in input, l'output dovrebbe essere
    ciao
    caro giocare
    mondo

    dove mondo è figlio sinistro di giocare, quindi viene stampato prima...
    perciò dico che l'inserimento non inserisce bene.. visto che la stampa è sicuramente corretta (credo).
  • Re: Errore strcmp

    La stampa inorder stampa
    figlio sinistro, radice, figlio destro.

    Mi sono permesso di scrivere un po meglio secondo me la funzione di stampa ricorsiva.
    
    void abr_stampa(ABR t) {
        if (t==NULL)
            return;
    
        abr_stampa(t->sx);
    
        printf("%s\n",t->str);
    
        abr_stampa(t->dx);
    
    }
    
    Adesso proviamo a disegnare l'albero
    ciao
    caro
    giocare
    mondo
    
                                                      ciao
                                               caro       giocare
                                                                        mondo
    
    la stampa inorder che fa;
    scende a sx
    stampa caro
    ritorna
    stampa radice ciao
    scende a dx
    a sx non trova niente
    stampa radice giocare
    scende a dx stampa mondo
  • Re: Errore strcmp

    Non mi trovo perchè nell'inserimento mondo è più piccola di giocare quindi andrà a sinistra, no a destra...

    quando vado ad inserire mondo, ho già
                  ciao
          caro             giocare
    strcmp(giocare,ciao) è > 0 quindi va a destra
    strcmp(mondo,giocare) è <0 quindi va a sinistra e mondo dev'essere figlio sinistro di giocare..
    perchè non ci troviamo così?
  • Re: Errore strcmp

    Come mondo è più piccolo di giocare. E' più corta come parola, ma alfabeticamente viene dopo giocare.
  • Re: Errore strcmp

    Allora ritorniamo al problema originario è cioè che ho (avevo) le idee confuse su strcmp.. prima ti fatto un esempio ma era solo un caso per cui ci trovavamo con lo stesso risultato.. solo ora ho capito bene!! Strcmp va a confrontare lettera per lettera e verifica chi è alfabeticamente minore o maggiore, non c'entra proprio niente con la lunghezza.. ora ho capito!
  • Re: Errore strcmp

    ciao
    caro
    giocare
    mondo
    Allora vediamo l'inserimento passo per passo, il tuo algoritmo fa questo:

    inserisco ciao nella radice // Questo lo diamo per scontato
    strcmp(ciao, caro) è < 0 quindi va a sx inserisce caro
    strcmp(ciao,giocare) è >0 quindi va a dx inserisce giocare
    strcmp(ciao,mondo) è >0 quindi va a dx
    poi scende e confronta
    strcmp(giocare,mondo) è >0 quindi va a dx inserisce mondo


    L'quivoco nasce dal fatto che comunque tu fai il confronto sempre con la radice,
    strcmp(elem, t->str);
  • Re: Errore strcmp

    Si adesso mi trovo. Il mio errore era proprio all'origine, sul funzionamento di strcmp. Grazie mille! Peccato che non riesco a far funzionare Code::Block e quindi i vari warning mi sfuggono..
  • Re: Errore strcmp

    Prova a disinstallarlo e reinstallare. Ci sono due versioni, prendi quella più grande.

    Oppure puoi usare eclipse. Per il C io mi trovo bene con code::clocks eclipse lo uso per java.

    Saluti.
  • Re: Errore strcmp

    Si ho installato quella più grande. Quando creo il progetto console con il main poi non so dove nelle impostazioni collegare il file .a della libreria. Quindi non me la trova. Non so proprio come si fa le guide online non mi hanno aiutato molto.
  • Re: Errore strcmp

    Allora!

    Crei i file .h e .c
    A sinistra hai il project workspace, se ti metti sul tuo progetto e clikki con il tasto destro add files e aggiungi tutti i file che hai bisogno per il progetto.

    Buon lavoro
  • Re: Errore strcmp

    Grazie mille, ci sono riuscita. Decisamente superiore rispetto a Devc++.
Devi accedere o registrarti per scrivere nel forum
40 risposte