PDA

Visualizza la versione completa : Ancora un problema con la gestione delle stringhe


Kmutil
03-07-2008, 12:10
Ho un altro quesito da sottoporvi.

Praticamente devo ricevere una stringa in input che contenga anche dei numeri e:

-sommare i numeri presenti nella stringa
-creare una cifra composta da tali numeri (ad Es. stringa ----> we34jhu57 ---> cifra = 3457) e sommarla alla somma dei numeri presenti nella stringa.

ecco il listato che ho elaborato io




//Somma numeri in una stringa
#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
const int strlenght=20;
char str[strlenght+1];
char nod[strlenght+1];
int somma, j, i, cifra=0;
cout << "Inserire stringa (max " <<strlenght<< " char) > ";
cin.getline(str, strlenght);
somma = 0; j=0; i=0;
while ('\0'!=str[j])
{
if ((str[j]>='0') && (str[j]<='9'))
{
somma += (int)str[j] - (int)'0';
nod[i] = str[j];
}
j++;
i++;
}
cifra = (int)nod;
cout << "La somma dei numeri presenti nella stringa e' :"<< somma << endl;
cout << "Il numero formato dalle cifre presenti nella stringa e' : " << cifra << endl;
cout << "La loro somma e' : " << somma + cifra << endl;
system("pause");
return 0;
}



l'dea era di creare un'array di appoggio dove inserire sequenzialmente i numeri trovati nella stringa e poi successivamente trasformare l'array in un intero tramite il casting. purtroppo per l'operazione di casting non funziona in modo esatto. Dove sbaglio ?

Grazie

mondobimbi
03-07-2008, 12:37
hai un po' pasticciato



//Somma numeri in una stringa
#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{

const int strlength = 20;

char str[strlength + 1];
char nod[strlength + 1];

cout << "Inserire stringa (max " <<strlength << " char) > ";
cin.getline ( str, strlength );

int somma = 0;
int j = 0;
int i = 0;

while ('\0'!=str[j]) {

if ((str[j]>='0') && (str[j]<='9')) {

somma += str[j] - '0';
nod[i] = str[j];
i++;
}

j++;

}

nod[i] = '\n';

int cifra = atoi ( nod ) ;

cout << "La somma dei numeri presenti nella stringa e' :"<< somma << endl;
cout << "Il numero formato dalle cifre presenti nella stringa e' : " << cifra << endl;
cout << "La loro somma e' : " << somma + cifra << endl;

return (0) ;

}



ciao
sergio

MItaly
03-07-2008, 12:38
cifra = atoi(nod);
---EDIT---
Tardi... :dh:

mondobimbi
03-07-2008, 12:51
pi che tardi non l'unico, l'incremento di i deve essere spostato interno al if ed la stringa nod deve essere opportunamente terminata con '\0'.

Aggiungo anche che il ciclo, nello spirito C deve essere scritto


while ( str[j] ) {

if ( isdigit(str[j]) ) {

somma += str[j] - '0';
nod[i] = str[j];
i++;
}

j++;

}


altrimenti usa la classe string del c++.
ciao
sergio

Kmutil
03-07-2008, 14:41
Ok, innanzitutto grazie per la correzione, essendo uno alle prime armi certe funzioni come "atoi" non le conosco, ora mi sono informato, praticamente vediamo se ho capito




while ('\0'!=str[j]) {

if ((str[j]>='0') && (str[j]<='9')) {

somma += str[j] - '0';/*in questa fase per il compilatore i numeri
estratti sono ancora char giusto ?*/
nod[i] = str[j];
i++;
}

j++;

}

nod[i] = '\n';// con questo poni al termine dell'array il carattere '\0'
int cifra = atoi ( nod ) ;/* atoi non la conoscevo come funzione, trasforma l'array nod da
string in integer */



Praticamente io cercavo di fare il casting ed inserire direttamente gli elementi nell'array (sbagliando visto che nod dichiarato char) invece con questo metodo la conversione a integer avviene alla fine.

ho capito bene ?

Grazie !

Loading