View Full Version : [C++] Esercizio da risolvere
Alex88na
29-10-2007, 18:03
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! :D
thx in anticipo!:)
Quando trovi una cifra fai:
num = 10 * num + (s[i] - '0');
Quando trovi un cifra azzeri sommi num al totale e azzeri num ;)
Alex88na
29-10-2007, 20:21
scusami non ho capito molto :(... nell'if devo mettere:
num = 10 * num + (s[i] - '0');
?? e per quale motivo faccio -'0'?:confused:
cout <<"Stringa:"; cin.getline(s,100);
while (s[i]!='\0') {
if((s[i]>='0') && (s[i]<='9'))
i++;
}
cout << "La somma è: " << somma << endl;
marko.fatto
29-10-2007, 20:32
scusami non ho capito molto :(... nell'if devo mettere:
num = 10 * num + (s[i] - '0');
?? e per quale motivo faccio -'0'?:confused:
con -'0' togli il valore dello zero nella tabella ascii quindi ti ritrovi con il num giusto...
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
marko.fatto
29-10-2007, 20:35
Quando trovi una cifra fai:
num = 10 * num + (s[i] - '0');
Quando trovi un cifra azzeri sommi num al totale e azzeri num ;)
Senza offesa ma questa frase è un gran torcol*:stordita:
*garbuglio
Alex88na
29-10-2007, 20:48
con -'0' togli il valore dello zero nella tabella ascii quindi ti ritrovi con il num giusto...
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
Ho capito! thx (non tenevo presente che il numero non è salvato come intero ma è salvato come carattere):)
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?
cout <<"Stringa:"; cin.getline(s,100);
while (s[i]!='\0') {
if((s[i]>='0') && (s[i]<='9'))
i++;
}
cout << "La somma è: " << somma << endl;
dopo l'if devo porre:
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?:confused:
marko.fatto
29-10-2007, 21:01
dopo l'if devo porre:
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?:confused:
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;
}
}
Ma prendilo come linea guida xkè c'ha un po' di robe da mettere apposto:D
Senza offesa ma questa frase è un gran torcol*:stordita:
*garbuglio
Sì, c'era un azzeri in più ;)
Ma prendilo come linea guida xkè c'ha un po' di robe da mettere apposto:D
C'è solo un errorino sull'incremento di i a dire la verità...
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++;
}
Alex88na
29-10-2007, 23:41
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)
// esercizio
#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;
int main ()
{
char s[100];
int v[100];
int i=0, j, z, x, k=0, prova, num, somma=0;
cout << "Programma che permette di ..."<< endl;
cout <<"Stringa=";
cin.get(s,100);
while (s[i]!='\0')
{
cout << endl << "entro nel ciclo"<<endl;
if((s[i]>='0') && (s[i]<='9'))
{
cout <<"il numero è una cifra"<<endl;
j=i;
j++;
while ((s[j]>='0')&&(s[j]<='9'))
{
cout <<"anke j++ è una cifra"<<endl;
j++;
}
j--;
cout <<"vedo se i=j"<<endl;
if(i==j)
{
cout<<"i=j!!!!!!!!!!!!!!! sommo, ecco il numero "<<s[i]<<endl;
somma=somma+ s[i]-'0';
}
else{
cout << "i è diverso da j"<<endl;
k=0;
z=j;
cout <<"ecco z"<<z<<endl;
cout<<"ecco i "<<i<<endl<<"ecco j "<<j<<endl;
while(i!=j)
{
v[k]=s[j]-'0';
cout << "ecco v[k] temporaneo"<<v[k]<<endl;
j--;
k++;
}
v[k]=s[j]-'0';
cout << "ecco v[k] ultimo" << v[k] << endl;
j=0;
while(j<=k)
{
cout << "ecco v[j] "<<v[j]<< " ed ecco j "<< j<<" e k "<<k <<endl;
prova=v[j]*(10^j);
cout << "ecco v[j] elevato "<<prova<<endl;
num=num+v[j]*(10^j);
cout<<"ecco num sommato al resto "<<num<<endl;
j++;
}
somma=somma+num;
cout<<"ecco soma delle cifre"<<somma<<endl;
cout <<"ecco z"<<z<<endl;
i=i+(z-i);
}
}
else
cout <<"il numero non è una cifra"<<endl;
i++;
}
cout << endl <<"somma=" << somma << endl;
cout << endl << "Programma realizzato da: Alessandro " << endl;
system("pause");
}
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...
L'operatore ^ non fa la potenza, ma l'or esclusivo...
Alex88na
30-10-2007, 21:03
L'operatore ^ non fa la potenza, ma l'or esclusivo...
l'or esclusivo?:confused:
e come faccioa fare la potenza senza usare la funzione pow?
Non certo in quel modo...
Puoi fare un for che moltiplica x per se stesso per n volte...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.