PROBLEMA Lettere in comune fra due stringhe - C programming

Pubblicità
Finalmente funziona.

Scusa se sono seccante, ma ho ancora due cose da chiedere:

1- Hai dovuto inserire '\0' perché con fgets non si inseriscono automaticamente nell'array?
2- Vorrei aggiungere un'ulteriore controllo all'if, che non fa inserire lettere già inserite nell'array stampa (nell'esempio di "cane - casa" stampa ca e non caa). Avevo pensato di inserire:

Codice:
if (parola[i] == parola2[i] && strchr(stampa, parola[i] != 1)

però mi da lo stesso risultato. Dove sbaglio? e_e

Googlerò qualcosa per capire meglio come funzionano fgets e puts. Sinceramente sono sollevato, pensavo di aver sbagliato qualcosa al livello logico :C
 
Finalmente funziona.

Scusa se sono seccante, ma ho ancora due cose da chiedere:

1- Hai dovuto inserire '\0' perché con fgets non si inseriscono automaticamente nell'array?
2- Vorrei aggiungere un'ulteriore controllo all'if, che non fa inserire lettere già inserite nell'array stampa (nell'esempio di "cane - casa" stampa ca e non caa). Avevo pensato di inserire:

Codice:
if (parola[i] == parola2[i] && strchr(stampa, parola[i] != 1)

però mi da lo stesso risultato. Dove sbaglio? e_e

Googlerò qualcosa per capire meglio come funzionano fgets e puts. Sinceramente sono sollevato, pensavo di aver sbagliato qualcosa al livello logico :C

1- Fgets legge anche il \n. Altre funzioni, invece, lo utilizzano come delimitatore e pertanto non lo includono. Tuttavia dovrai successivamente ignorarlo prima di altre letture, altrimenti ti sembrerà che la funzione "non legga nulla".
2-
Codice:
 if (parola[i] == parola2[j])
        {
          if (strchr(stampa, parola[i]) == NULL) 
             stampa[k++] = parola[i];
        }
puts non fa altro che stampare una stringa + \n. Ed il compilatore, quando possibile, trasformerà printf in puts/putchar.
Ad esempio http://goo.gl/uTykQv
Maggiori info -> About GCC printf optimization
 
Grazie per le spiegazioni.

Per quanto riguarda l'if invece? Vorrei anche controllare se la lettera è già presente nell'array, in modo tale da non far stampare due volte la stessa, ma con quel strchr non funge.
 
Fa esattamente quello.
Appunto, allora perché non funge? x)
Pensiamo sempre all'esempio cane - casa: confronta al 'c' di cane con tutte le lettere di casa, e quindi la posiziona a stampa[0]. Poi confronta la 'a': la inserisce in stampa[1] quando confrontata con la seconda lettera di casa, però la inserisce di nuovo quando viene confrontata con la quarta, anche se non dovrebbe perché la a è già presente :grat:
 
Appunto, allora perché non funge? x)
Pensiamo sempre all'esempio cane - casa: confronta al 'c' di cane con tutte le lettere di casa, e quindi la posiziona a stampa[0]. Poi confronta la 'a': la inserisce in stampa[1] quando confrontata con la seconda lettera di casa, però la inserisce di nuovo quando viene confrontata con la quarta, anche se non dovrebbe perché la a è già presente :grat:
Ripeto: a me funziona.
C code - 35 lines - codepad

Inserisci la prima parola: cane
Inserisci la seconda parola: casa
Le lettere in comune fra le due parole sono: ca
 
Avevo usato una sintassi sbagliata, adesso funziona tutto perfettamente.

Grazie mille per i consigli, l'aiuto e sopratutto la pazienza :)
 
Pubblicità
Pubblicità
Indietro
Top