Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
[C++] Riutilizzare un oggetto stringstream
Nuovo argomento   Rispondi    Indice del forum -> Programmazione
Precedente :: Successivo  
Autore Messaggio
Crono
Semidio
Semidio


Registrato: 24/03/05 14:12
Messaggi: 224
Residenza: Trieste

MessaggioInviato: 21 Mag 2007 11:19    Oggetto: [C++] Riutilizzare un oggetto stringstream Rispondi citando

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
Profilo Invia messaggio privato
Crono
Semidio
Semidio


Registrato: 24/03/05 14:12
Messaggi: 224
Residenza: Trieste

MessaggioInviato: 21 Mag 2007 11:42    Oggetto: Rispondi citando

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
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11566
Residenza: Tokelau

MessaggioInviato: 29 Mag 2007 10:47    Oggetto: Rispondi

prova ad azzerare il buffer usando
str()
ovvero
Codice:
ss.str("");

da qui:
http://www.cplusplus.com/reference/iostream/stringbuf/str.html
Top
Profilo Invia messaggio privato HomePage
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Programmazione Tutti i fusi orari sono GMT + 1 ora
Pagina 1 di 1

 
Vai a:  
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