u_boss (Normal User)
Newbie
Messaggi: 11
Iscritto: 19/05/2010
|
Ragazzi questo è il mio codice.
Praticamente l'utente immette una frase(quel che vuole) ed il programma deve leggere la frase e terminare di memorizzare le parole immesse quando ne trova due uguali.
Il problema è che il l'algoritmo dovrebbe essere giusto,ma eseguendolo non mi stampa niente. Dove è l'errore?
Sono duee giorni che ci sono sopra e non riesco a capire cosa c'è che non va!
GRazie in anticipo per l'aiuto.
P.S. Sono un neofita del C
Codice sorgente - presumibilmente C++ |
#include <stdio.h> #include <stdlib.h> #include <string.h> #define maxchar 21 #define maxparole 10 void reverse_lett(char word[maxchar]);/*funzione per invertire l'ordine delle lettere nella stringa*/ int main() { enum {SI,NO}; int i=0,j,ESCI; ESCI=NO;/*verifica l'uscita dal ciclo*/ char parole[maxparole][maxchar],temp[maxchar]={" "}; printf("Inserire serie di parole\n"); while(ESCI==NO)/*ciclo while per riempire il vettore di stringhe*/ { scanf("%s",temp); /*variabile temporanea*/ if((strcmp(temp,parole[i-1])==0)) /*confronto*/ ESCI=SI; else { strcpy(parole[i],temp);/*copia della stringa nel vettore*/ i++; } } for(j=0;j<=i;j++) /*ciclo per mandare alla funzione tutte le stringhe immesse*/ { reverse_lett(parole[j]);/*funzione*/ } return EXIT_SUCCESS; } /*-----inizio funzione reverse------*/ void reverse_lett(char word[maxchar]) { int k,lung=strlen(word); int x=strlen(word); char temp; for(k=0;k<(lung/2);k++) { temp=word[k]; word[k]=word[x]; word[x]=temp; x--; } /*ora la stringa è rovesciata*/ printf("%s",word);/*stampa*/ }
|
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6378
Iscritto: 03/01/2010
|
Cosa c'entra quello che hai detto (terminare due stringhe ...) con l'inversione di cui parli nel titolo?
E poi, facci un esempio, usando il tuo codice, di una frase inserita e di cosa succede ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
u_boss (Normal User)
Newbie
Messaggi: 11
Iscritto: 19/05/2010
|
Innanzitutto grazie per avermi risposto.
ad esempio io scrivo nella shell
<ciao mamma stasera sono bravo bravo>
il programma memorizza in un vettore di stringhe parole[][]
parole[1] ciao
parole[2] mamma
parole[3] stasera
parole[4] sono
parole[5] bravo
memorizza solo questo perchè si ferma quando trova due parole uguali.
|
|
u_boss (Normal User)
Newbie
Messaggi: 11
Iscritto: 19/05/2010
|
ed inverte le parole memorizzate,in questo caso:
oaic ammam onos ovarb
Ultima modifica effettuata da u_boss il 19/05/2010 alle 15:39 |
|
nessuno (Normal User)
Guru^2
Messaggi: 6378
Iscritto: 03/01/2010
|
Ok ... e quindi, il problema qual e'?
Cioe', senza doverlo copiare e compilare, il tuo programma cosa sbaglia?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
u_boss (Normal User)
Newbie
Messaggi: 11
Iscritto: 19/05/2010
|
praticamente non mi stampa niente e si chiude.
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6378
Iscritto: 03/01/2010
|
Gli errori sono nelle linee che ti posto corrette
Codice sorgente - presumibilmente C/C++ |
...
for(j=0;j<i;j++) // < e non <=
...
int x=lung-1; // uguale alla lunghezza - 1
...
printf("%s\n",word); // aggiunto un \n per chiarezza
|
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
u_boss (Normal User)
Newbie
Messaggi: 11
Iscritto: 19/05/2010
|
Ora và!!
ma perchè per invertire deve partire da x=lung-1?!
perchè la lunghezza della stringa mi conta anche la posizione del terminatore??
|
|
Premoli (Normal User)
Pro
Messaggi: 108
Iscritto: 25/06/2009
|
ciao!!!
In pratica se tu scrivi ciao, strlen() ti darà come valore 4, ma la prima posizione dei vettori è quella di posto zero, in pratica ci sarà una cosa del genere:
word[0]='c', word[1]='i', word[2]='a', word[3]='o', e in word[4] ci sarà il terminatore di stringa '\0' quindi word[4]='\0'...
Spero di essermi spiegato, altrimenti chiedi pure...
|
|