Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Stampare stringa al contrario...
Forum - C/C++ - Stampare stringa al contrario...

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


Messaggi: 19
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 19:39
Domenica, 03/01/2010
Ciao a tutti. Sono nuovo del forum.

Ho qualche difficoltà a creare un programma che legga da tastiera una sequenza di caratteri (al più di 50 elementi) terminata da un punto e li stampi a video nell’ordine inverso.

Questo è il codice che ho provato a scrivere (ma ci sono sicuramente degli errori, anche gravi forse). Mi potreste gentilmente dare una mano? (Senza usare funzioni di libreria).

Codice sorgente - presumibilmente C/C++

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. main()
  5. {
  6.     int i=0, j;
  7.     char str[50];
  8.    
  9.     do{
  10.         scanf("%c", str[i]);
  11.         i++;
  12.     }while(i!=50 || str[i]!='.');
  13.    
  14.     j=i;
  15.    
  16.     for(i=0; i<j; i++)
  17.     {
  18.         printf("%c", str[j]);
  19.         j--;  
  20.     }
  21.    
  22.     system("pause");
  23.     return 0;
  24. }



Quello che ho pensato io è creare un vettore di caratteri di 50 elementi. Inizializzo un contatore a 0 e con un ciclo do-while leggo da tastiera la sequenza di caratteri e incremento il contatore. Se il contatore è 50 oppure se il carattere è un punto, il ciclo dovrebbe terminare. A questo punto salvo il valore del contatore in un'altra variabile e con un ciclo for stampo i caratteri contenuti nel vettore partendo dall'ultimo. Ma non funziona... Che cosa sbaglio? Grazie.

Ultima modifica effettuata da Astaroth il 03/01/2010 alle 20:02
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 20:35
Domenica, 03/01/2010
L'idea non è sbagliata, ma guarda le correzioni

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define MAX 50
  5.  
  6. int main()
  7. {
  8.     int i=0, j;
  9.         char str[MAX];
  10.  
  11.     do
  12.         {
  13.                 scanf("%c", &str[i++]);
  14.     } while(i<MAX && str[i-1]!='.');
  15.    
  16.         if(i<MAX) i--;
  17.  
  18.     for(j=i-1; j>=0; j--)
  19.         printf("%c", str[j]);
  20.  
  21.     system("pause");
  22.     return 0;
  23. }



Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
Astaroth (Normal User)
Newbie


Messaggi: 19
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 21:19
Domenica, 03/01/2010
Uh, grazie per le correzioni! :k:

Posso chiederti però il perché del str[i++] dentro scanf()? Se nella condizione del while avessi messo i!=50 al posto di i<50 andava ugualmente bene?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 22:16
Domenica, 03/01/2010
Testo quotato

Postato originariamente da Astaroth:

Uh, grazie per le correzioni! :k:



Prego

Testo quotato


Posso chiederti però il perché del str[i++] dentro scanf()?



Parli del ++ o della str[...] ?

Testo quotato

Se nella condizione del while avessi messo i!=50 al posto di i<50 andava ugualmente bene?





Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
Astaroth (Normal User)
Newbie


Messaggi: 19
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 22:27
Domenica, 03/01/2010
Testo quotato

Postato originariamente da nessuno:
Parli del ++ o della str[...] ?


Dell'insieme... str[i++]. Perché non solo str? Inserisci il carattere nell'elemento successivo... quindi l'elemento 0 lo salti?

Ultima modifica effettuata da Astaroth il 03/01/2010 alle 22:40
PM Quote
Avatar
ilmettiu (Ex-Member)
Pro


Messaggi: 88
Iscritto: 17/09/2009

Segnala al moderatore
Postato alle 0:37
Lunedì, 04/01/2010
str[i++] utilizza i e poi lo incrementa. Quello che dici tu sarebbe successo con str[++i] :k:


-NO-     Windows 95
-NO-     Windows 98
-NO-     Windows ME
-NO-     Windows XP
-LOL!-   WinXP.ProSP3+Crack+Keygen[Ita].iso
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 2:33
Lunedì, 04/01/2010
L'operatore di postincremento utilizzato in

array[j++]

equivale a scrivere

array[j]
j++



Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
Astaroth (Normal User)
Newbie


Messaggi: 19
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 12:36
Lunedì, 04/01/2010
Grazie ad entrambi! Quindi quella è la forma contratta del codice che ho scritto.

Avrei un'ultima domanda... di logica... :D

Poiché la stringa deve essere lunga al massimo 50 caratteri OPPURE deve essere terminata da un punto, perché non si usa OR al posto di AND? Cioè, se voglio che solo una delle condizioni basti per terminare il ciclo while non devo usare || al posto di &&? La tabella di verità dell'OR dovrebbe essere questa:

0 0 --> 0
0 1 --> 1
1 0 --> 1
1 1 --> 1

Ultima modifica effettuata da Astaroth il 04/01/2010 alle 12:40
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:03
Lunedì, 04/01/2010
Ti sfugge che nella while non c'è la condizione per terminare il ciclo.

C'è la condizione per ripetere il ciclo.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo