PDA

Visualizza la versione completa : [C++] Conversione da stringa ad array di interi


freetom
29-11-2009, 14:23
Ho una stringa



s = "1,2,3,4,5";


e due problemini... :master:

problema 1 : scomporre la stringa in array di stringhe per ottenere:


string array[] = {"1","2","3","4","5"}


problema 2 : trasformare l'array di stinghe in array di interi... per ottenere:


int array[] = {1,2,3,4,5}


thanks!

:ciauz:

oregon
29-11-2009, 17:44
Ma vuoi ottenere l' 1) per avere il 2) ?

freetom
29-11-2009, 17:54
Ma se c'e' un modo per passare direttamente dalla stringa... al (2) meglio! :)

THANKS! :ciauz:

ant_alt
29-11-2009, 17:56
http://www.cplusplus.com/reference/clibrary/cstring/strtok/

oregon
29-11-2009, 18:08
Ovviamente ... con questo



string::size_type lPos = s.find_first_not_of(",", 0);
string::size_type pos = s.find_first_of(",", lPos);

while (string::npos != pos || string::npos != lPos)
{
int v = atoi(s.substr(lPos, pos - lPos).c_str());
cout << "Valore intero " << v << endl;

lPos = s.find_first_not_of(",", pos);
pos = s.find_first_of(",", lPos);
}


ottieni i valori interi a partire dalla stringa s, ma li devi inserire tu nell'array ...

Se non sai quanti sono i valori, allora ti serve un array dinamico.

freetom
29-11-2009, 18:47
Originariamente inviato da oregon
Ovviamente ... con questo



string::size_type lPos = s.find_first_not_of(",", 0);
string::size_type pos = s.find_first_of(",", lPos);

while (string::npos != pos || string::npos != lPos)
{
int v = atoi(s.substr(lPos, pos - lPos).c_str());
cout << "Valore intero " << v << endl;

lPos = s.find_first_not_of(",", pos);
pos = s.find_first_of(",", lPos);
}


ottieni i valori interi a partire dalla stringa s, ma li devi inserire tu nell'array ...

Se non sai quanti sono i valori, allora ti serve un array dinamico.



Dunque... ho provato cosý... :ecco:





for (int w=0; w<vec.size(); w++) {

s = vec[w];



cin.get();

cout << "\n\n";

cout << "ADESSO s E' ? ";
cout << s;

//TENTATIVO II ---------------------------------------------------

string::size_type lPos = s.find_first_not_of(",", 0);
string::size_type pos = s.find_first_of(",", lPos);

while (string::npos != pos || string::npos != lPos)
{
int v = atoi(s.substr(lPos, pos - lPos).c_str());

cout << "\n\n";
cout << "Valore intero " << v << endl;

gruppovoluto.push_back(v); //inserisco i valori nel vector...

lPos = s.find_first_not_of(",", pos);
pos = s.find_first_of(",", lPos);
}

//---------------------------------------------------------fine tentativo II

cout << "ADESSO GRUPPOVOLUTO E' COMPOSTO DA? ";
cout << gruppovoluto[0];
cout << ",";
cout << gruppovoluto[1];
cout << ",";
cout << gruppovoluto[2];
cout << ",";
cout << gruppovoluto[3];
cout << ",";
cout << gruppovoluto[4];


}




PerchŔ i valori di gruppovoluto mi restano sempre uguali nonostante il for e soprattutto la stringa s che cambia regolarmente...? :dh˛: :dh˛: :dh˛: :confused: :)

GRAZIE mille comunque!

:ciauz:

oregon
29-11-2009, 19:44
PerchŔ tutti gli elementi si aggiungono e tu vedi sempre i primi, se non svuoti il vector ad ogni giro.

freetom
29-11-2009, 20:00
avevo sbagliato a posizionare il gruppovoluto.clear() :zizi:

GRAZIEEE

:ciauz:

Loading