Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [C++] AIUTO! Eliminare spazi ripetuti in una stringa!

    Allora: devo realizzare questo sottoprogramma:
    eliminaSpazi(): elimina gli spazi ripetuti consecutivi in una stringa

    Esempio:_
    Nel mezzo del cammin di nostra vita
    Risultato:
    Nel mezzo del cammin di nostra vita


    Ho provato a farlo cosi:
    codice:
    void eliminaSpazi (char *v) {
    	int i=0,j;
    	while (v[i]!='\0') {
    		while ((v[i]==' ') && (v[i+1]=v[i])) {
    		j=i+1;
    			while (v[j]!='\0') {
    				v[j]=v[j+1];
    				j++;
    				}
    			}
    		i++;
    		}
    	}
    ma non funziona,allora ho visto la soluzione dell'esercizio ed è questa:

    SOLUZIONE
    codice:
    void eliminaSpazi2(char* p)
    {
         int i=0,j;
         while(p[i]!='\0')
         {
    		 if((p[i]==' ')&&(p[i+1]==p[i]))
    		 {
    			 j=i+1;
    			 while(p[j]!='\0')
    			    {
    					p[j]=p[j+1];
    					j++;
    				}
    			 i--;
    			 }	 
    			 i++;
    		 }   
        
       }
    Ma non ho capito dove sbaglio io e perchè nella soluzione giusta ci sta quell'i-- : che necessità c'è di tornare indietro???

  2. #2
    argh, indentato un attimo malaccio, mi stavo per confendere

    comunque, se ti fai un esempio su carta, lo capisci al volo
    quel i-- serve per controllare anche quando ci sono più di due spazi di fila

    se per esempio ce ne fossero tre (con " _" indico uno spazio per semplicità)

    parola _ _ _parola
    dopo un iterazione del tuo programma diventerebbe
    parola _ _ parola

    il problema è che a questo punto, nel TUO codice, la tua i che punta al primo spazio, si sposterebbe subito sul secondo spazio e analizzerebbe i caratteri successivi: ERRATO

    nel codice del tuo professore invece, fa un bel i--, quindi all'iterazione successiva il programma si ritrova sullo spazio precedente, e si rende conto immediatamente che subito dopo c'è un altro spazio, e che quindi è presente la sequenza di due spazi di fila che stai ricercando

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.