| 
 | |||||||
| 
 | 
|  | 
|  | 
|  | Strumenti | 
|  29-10-2007, 19:03 | #1 | 
| Member Iscritto dal: Dec 2005 
					Messaggi: 135
				 | 
				
				[C++] Esercizio da risolvere
			 
		Assegnata una stringa s contenente anche delle cifre, sommare la somma delle sequenze di cifre presenti in s. Per esempio s="abc3 casa2 y34zq", il progrmma deve restiture 3+2+34=39. Io personalmente basandomi su un altro esercizio del libro ho pensato di utilizzare per prima cosa un ciclo while che scorri la stringa finkè nn trovi il carattere nullo(ovviamente utilizzo cin.getline per l'input della stringa), a questo punto faccio un if che controlla se il numero è compreso tra 0 e 9 se si voglio andare a verificare se nei successi nposti della stringa ci sn altre cifre. Come faccio a verificare se nelle successivi posizioni di s sn cifre e conservarmi il risultato? io avrei pensato tipo nel caso della stringa s="abc3 casa2 y34zq" dove c'è 34 di utilizzare il fatto che il sistema decimale è posizionale nel senso che salvo s[i]*(10^x) dove x aumenta ogni volta che nella posizione s[i++] è presente un'altra cifra.. Speriamo di essermi fatto capire :P, altrimenti se avete qlk altro modo da potermi consigliare è ben accetto!  thx in anticipo!   | 
|   |   | 
|  29-10-2007, 20:11 | #2 | 
| Senior Member Iscritto dal: Apr 2000 Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29 
					Messaggi: 53971
				 | 
		Quando trovi una cifra fai: num = 10 * num + (s[i] - '0'); Quando trovi un cifra azzeri sommi num al totale e azzeri num   | 
|   |   | 
|  29-10-2007, 21:21 | #3 | ||
| Member Iscritto dal: Dec 2005 
					Messaggi: 135
				 | 
		scusami non ho capito molto   ... nell'if devo mettere: num = 10 * num + (s[i] - '0'); ?? e per quale motivo faccio -'0'?   
 | ||
|   |   | 
|  29-10-2007, 21:32 | #4 | |
| Senior Member Iscritto dal: Jul 2007 
					Messaggi: 499
				 | Quote: 
 Esempio... 7 salvato come carattere vale 55... per avere il suo valore "reale" devi toglierci il valore del carattere 0 cioè 48 così ti ritrovi ad avere 55-48=7 Se non sono stato chiaro (probabile) chiedi 
				__________________     | |
|   |   | 
|  29-10-2007, 21:35 | #5 | |
| Senior Member Iscritto dal: Jul 2007 
					Messaggi: 499
				 | Quote: 
   *garbuglio 
				__________________     | |
|   |   | 
|  29-10-2007, 21:48 | #6 | ||
| Member Iscritto dal: Dec 2005 
					Messaggi: 135
				 | Quote: 
  però non ho capito xkè c'è 10*num..se voglio solo il numero mi basta fare appunto s[i]-'0' ... Per il problema come devo fare? Quote: 
 num = 10 * num + (s[i] - '0'); in somma solo se è un'unica cifra altrimenti devo continuare a scorrere la stringa finkè nn trovo il primo carattere nullo, ma nel frattempo dove mi salvo tutte le unità temporanee?   Ultima modifica di Alex88na : 29-10-2007 alle 22:00. | ||
|   |   | 
|  29-10-2007, 22:01 | #7 | |
| Senior Member Iscritto dal: Jul 2007 
					Messaggi: 499
				 | Quote: 
 Codice: somma=0;
while (s[i]!='\0')
{
    if((s[i]>='0') && (s[i]<='9'))
    {
        num = 10 * num + (s[i] - '0');
        i++;
    }
    if((s[i-1]<'0') && (s[i-1]>'9'))
    {
        somma+=num;
        num=0;
    }
}  
				__________________     | |
|   |   | 
|  30-10-2007, 00:28 | #8 | 
| Senior Member Iscritto dal: Apr 2000 Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29 
					Messaggi: 53971
				 | |
|   |   | 
|  30-10-2007, 00:32 | #9 | |
| Senior Member Iscritto dal: Apr 2000 Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29 
					Messaggi: 53971
				 | Quote: 
 Codice: somma = num = i = 0;
while (s[i]!='\0')
{
    if((s[i]>='0') && (s[i]<='9'))
    {
        num = 10 * num + (s[i] - '0');
    }
    else
    {
        somma+=num;
        num=0;
    }
    i++;
} | |
|   |   | 
|  30-10-2007, 00:41 | #10 | ||
| Member Iscritto dal: Dec 2005 
					Messaggi: 135
				 | 
		ho fatto il programma,dovrebbe funzionare,ma nn funziona il problema è che 10^0 equivale a 10! 10^1 equivale a 11!! ecco il codice (scusate x le innumerevoli stampe ma è x verificare i valori delel variabili) 
 mah...10^0=10... provato usare la funzione pow(10,j) ma nn mi funziona....(la libreria cmath è inclusa,bah....) fors eè dovuta al fatto ke restiusce un valore double? nada provato... Ultima modifica di Alex88na : 30-10-2007 alle 00:49. | ||
|   |   | 
|  30-10-2007, 01:26 | #11 | 
| Senior Member Iscritto dal: Apr 2000 Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29 
					Messaggi: 53971
				 | 
		L'operatore ^ non fa la potenza, ma l'or esclusivo...
		 | 
|   |   | 
|  30-10-2007, 22:03 | #12 | 
| Member Iscritto dal: Dec 2005 
					Messaggi: 135
				 | |
|   |   | 
|  30-10-2007, 22:07 | #13 | 
| Senior Member Iscritto dal: Apr 2000 Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29 
					Messaggi: 53971
				 | 
		Non certo in quel modo... Puoi fare un for che moltiplica x per se stesso per n volte... | 
|   |   | 
|   | 
| Strumenti | |
| 
 | 
 | 
Tutti gli orari sono GMT +1. Ora sono le: 20:37.









 
		 
		 
		 
		








 
  
 



 
                        
                        










