Precedente :: Successivo |
Autore |
Messaggio |
Crono Semidio
Registrato: 24/03/05 14:12 Messaggi: 224 Residenza: Trieste
|
Inviato: 21 Mag 2007 11:19 Oggetto: [C++] Riutilizzare un oggetto stringstream |
|
|
Devo creare un programma che acquisisca da un file delle stringe di testo e le converta in numeri e stringhe, ho pensato di poter effettuare facilmente questa operazione grazie a stringstream (me ingenuo), di seguito riporto un esempio del funzionamento di questo oggetto:
Codice: | #include<iostream>
#include<sstream>
#include<string>
using namespace std;
void main() {
int num1, num2;
string str1, str2;
stringstream ss;
ss<<"1 2 stringa_1 stringa_2";
ss>>num1>>num2>>str1>>str2;
cout<<"stringa: "<<ss.str()<<endl
<<"risultato dell'estrazione:"<<endl
<<"num1: "<<num1<<", num2: "<<num2<<endl
<<"str1: "<<str1<<", str2: "<<str2;
} |
fino a qui tutto bene, sfortunatamente i problemi arrivano quando occorre utilizzare lo stesso oggetto stringstream più di una volta come nell'esempio seguente:
Codice: | #include<iostream>
#include<sstream>
#include<string>
using namespace std;
void main() {
int num1, num2;
string str1, str2;
stringstream ss;
ss<<"1 2 stringa_1 stringa_2";
ss>>num1>>num2>>str1>>str2;
cout<<"stringa: "<<ss.str()<<endl
<<"risultato dell'estrazione:"<<endl
<<"num1: "<<num1<<", num2: "<<num2<<endl
<<"str1: "<<str1<<", str2: "<<str2<<endl<<endl;
ss<<"3 4 stringa_3 stringa_4";
ss>>num1>>num2>>str1>>str2;
cout<<"stringa: "<<ss.str()<<endl
<<"risultato dell'estrazione:"<<endl
<<"num1: "<<num1<<", num2: "<<num2<<endl
<<"str1: "<<str1<<", str2: "<<str2;
} |
in questo caso all'inserimento della seconda stringa ss non viene aggiornato e continua a contenere la prima stringa, ho provato a pulire ss usando clear() e flush() ma non è servito a niente e allora ho creato una funzione apposita per l'inserimento e l'estrazione dei dati da ss pensando che ad ogni chiamata della funzione il programma avrebbe creato un nuovo stream vuoto e utilizzabile, purtroppo ss non viene distrutto e ricreato come tutte le variabili delle funzioni ma rimane attivo anche alla chiusura della funzione e viene ripescato alla chiamata sucessiva.
E' possibile che i dati inseriti negli oggetti stringstream siano quasi immortali e l'unico modo per eliminarli e riutilizzare gli stream sia di terminare il programma oppure c'è una funzione apposita che si occupa di svuotare gli stream ? |
|
Top |
|
|
Crono Semidio
Registrato: 24/03/05 14:12 Messaggi: 224 Residenza: Trieste
|
Inviato: 21 Mag 2007 11:42 Oggetto: |
|
|
Ho trovato una soluzione ma spero che ci siano delle alternative
Codice: | #include<iostream>
#include<sstream>
#include<string>
using namespace std;
void main() {
int num1, num2;
string str1, str2;
stringstream ss;
ss<<"1 2 stringa_1 stringa_2";
ss>>num1>>num2>>str1>>str2;
cout<<"stringa: "<<ss.str()<<endl
<<"risultato dell'estrazione:"<<endl
<<"num1: "<<num1<<", num2: "<<num2<<endl
<<"str1: "<<str1<<", str2: "<<str2<<endl<<endl;
ss.~stringstream(); //distrugge ss
new ((void *)&ss)stringstream("3 4 stringa_3 stringa_4"); //crea un nuovo ss
ss>>num1>>num2>>str1>>str2;
cout<<"stringa: "<<ss.str()<<endl
<<"risultato dell'estrazione:"<<endl
<<"num1: "<<num1<<", num2: "<<num2<<endl
<<"str1: "<<str1<<", str2: "<<str2;
} |
|
|
Top |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11568 Residenza: Tokelau
|
Inviato: 29 Mag 2007 10:47 Oggetto: |
|
|
prova ad azzerare il buffer usando
str()
ovvero
da qui:
http://www.cplusplus.com/reference/iostream/stringbuf/str.html |
|
Top |
|
|
|
|
Non puoi inserire nuovi argomenti Non puoi rispondere a nessun argomento Non puoi modificare i tuoi messaggi Non puoi cancellare i tuoi messaggi Non puoi votare nei sondaggi
|
|