Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [AIUTO]Programma per invertire serie di parole inserite da tastiera
Forum - C/C++ - [AIUTO]Programma per invertire serie di parole inserite da tastiera

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
u_boss (Normal User)
Newbie


Messaggi: 11
Iscritto: 19/05/2010

Segnala al moderatore
Postato alle 15:28
Mercoledì, 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++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define maxchar 21
  5. #define maxparole 10
  6.  
  7. void reverse_lett(char word[maxchar]);/*funzione per invertire l'ordine delle lettere nella stringa*/
  8.  
  9. int main()
  10. {
  11.     enum {SI,NO};
  12.     int i=0,j,ESCI;
  13.     ESCI=NO;/*verifica l'uscita dal ciclo*/
  14.     char parole[maxparole][maxchar],temp[maxchar]={" "};
  15.     printf("Inserire serie di parole\n");
  16.     while(ESCI==NO)/*ciclo while per riempire il vettore di stringhe*/
  17.     {
  18.         scanf("%s",temp);  /*variabile temporanea*/
  19.         if((strcmp(temp,parole[i-1])==0))    /*confronto*/
  20.         ESCI=SI;
  21.         else
  22.         {
  23.             strcpy(parole[i],temp);/*copia della stringa nel vettore*/
  24.             i++;
  25.         }
  26.     }
  27.     for(j=0;j<=i;j++)
  28.     /*ciclo per mandare alla funzione tutte le stringhe immesse*/
  29.     {
  30.         reverse_lett(parole[j]);/*funzione*/
  31.     }
  32.     return EXIT_SUCCESS;
  33. }
  34. /*-----inizio funzione reverse------*/
  35. void reverse_lett(char word[maxchar])
  36. {
  37.     int k,lung=strlen(word);
  38.     int x=strlen(word);
  39.     char temp;
  40.     for(k=0;k<(lung/2);k++)
  41.     {
  42.         temp=word[k];
  43.         word[k]=word[x];
  44.         word[x]=temp;
  45.         x--;
  46.     }
  47.     /*ora la stringa è rovesciata*/
  48.     printf("%s",word);/*stampa*/
  49. }


PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6378
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 15:30
Mercoledì, 19/05/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à.
PM Quote
Avatar
u_boss (Normal User)
Newbie


Messaggi: 11
Iscritto: 19/05/2010

Segnala al moderatore
Postato alle 15:34
Mercoledì, 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.

PM Quote
Avatar
u_boss (Normal User)
Newbie


Messaggi: 11
Iscritto: 19/05/2010

Segnala al moderatore
Postato alle 15:37
Mercoledì, 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
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6378
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 15:58
Mercoledì, 19/05/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à.
PM Quote
Avatar
u_boss (Normal User)
Newbie


Messaggi: 11
Iscritto: 19/05/2010

Segnala al moderatore
Postato alle 16:01
Mercoledì, 19/05/2010
praticamente non mi stampa niente e si chiude.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6378
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 16:18
Mercoledì, 19/05/2010
Gli errori sono nelle linee che ti posto corrette

Codice sorgente - presumibilmente C/C++

  1. ...
  2.  
  3.     for(j=0;j<i;j++)   // < e non <=
  4.  
  5.     ...
  6.  
  7.     int x=lung-1;  // uguale alla lunghezza - 1
  8.  
  9.     ...
  10.  
  11.     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à.
PM Quote
Avatar
u_boss (Normal User)
Newbie


Messaggi: 11
Iscritto: 19/05/2010

Segnala al moderatore
Postato alle 16:34
Mercoledì, 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??

PM Quote
Avatar
Premoli (Normal User)
Pro


Messaggi: 108
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 16:54
Mercoledì, 19/05/2010
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...

PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo