|
|
|
![]() |
|
Strumenti |
![]() |
#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! ![]() |
![]() |
![]() |
![]() |
#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 ![]() |
![]() |
![]() |
![]() |
#3 | ||
Member
Iscritto dal: Dec 2005
Messaggi: 135
|
scusami non ho capito molto
![]() num = 10 * num + (s[i] - '0'); ?? e per quale motivo faccio -'0'? ![]()
|
||
![]() |
![]() |
![]() |
#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
__________________
![]() ![]() |
|
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Jul 2007
Messaggi: 499
|
Quote:
![]() *garbuglio
__________________
![]() ![]() |
|
![]() |
![]() |
![]() |
#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 21:00. |
||
![]() |
![]() |
![]() |
#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; } } ![]()
__________________
![]() ![]() |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
![]() |
![]() |
![]() |
#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++; } |
|
![]() |
![]() |
![]() |
#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 : 29-10-2007 alle 23:49. |
||
![]() |
![]() |
![]() |
#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...
|
![]() |
![]() |
![]() |
#12 |
Member
Iscritto dal: Dec 2005
Messaggi: 135
|
|
![]() |
![]() |
![]() |
#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: 00:43.