2009-02-12 13 views
8

मैं Num चर में एक पूर्णांक मान निकालने में विफल क्यों हूं?स्ट्रिंगस्ट्रीम निकालने पूर्णांक

#include <sstream> 
#include <vector> 
#include <iostream> 

using namespace std; 

int main() 
{ 
    string Digits("1 2 3"); 
    stringstream ss(Digits); 
    string Temp; 
    vector<string>Tokens; 

    while(ss >> Temp) 
     Tokens.push_back(Temp); 

    ss.str(Tokens[0]); 

    int Num = 0; 
    ss >> Num; 
    cout << Num; //output: 0 
} 

उत्तर

10

धारा 3 digist "1 2 3" EOF राज्य का गठन किया जाएगा के अंतिम निकालता है। यह str() सदस्य द्वारा साफ़ नहीं किया गया है, आपको इसे स्वयं करने की आवश्यकता है। अपना कोड इस पर बदलें:

ss.clear(); 
ss.str(Tokens[0]); 
+0

धन्यवाद। इसी तरह के सवाल थे, लेकिन मैंने बस से पहले sstream का पुनर्निर्माण किया। :( – Muxecoid

+0

मैंने हमेशा सोचा था कि आपको ss.seekg (0, ios :: seek_beg) को कॉल करने के साथ-साथ ईओएफ ध्वज को रीसेट करने की आवश्यकता है - क्या वास्तव में आवश्यक नहीं है? मेरी इच्छा है कि iostreams दस्तावेज़ अधिक सटीक हों ... –

6

आप सभी स्थिति झंडे (eofbit) रीसेट और (goodbit) एक अच्छी स्थिति में धारा लाना होगा:

ss.clear(); // clear status flags 
ss.str(Tokens[0]); 

कारण है कि अगर आप अंत तक निकालने रखने के लिए, आप करेंगे अंत मारा, और उस धारा पर ईओएफ ध्वज सेट किया जाएगा। उसके बाद, पढ़ना ऑपरेशन रद्द कर दिया जाएगा और आपको फिर से उस ध्वज को साफ़ करना होगा। वैसे भी, स्ट्रिंग को साफ़ करने और रीसेट करने के बाद, आप पूर्णांक निकालने पर जा सकते हैं।

8

आप एक अस्थायी string चर में क्यों पढ़ रहे हैं?

तुम बस एक पूर्णांक में stringstream से पढ़ सकते हैं ...

int main() 
{ 
    string Digits("1 2 3"); 
    stringstream ss(Digits); 
    int Temp; 
    vector<int> Tokens; 

    while(ss >> Temp) 
     Tokens.push_back(Temp); 
} 
2

एसटीएल! : पी

stringstream ss("1 2 3"); 
vector<int> Tokens; 
copy(istream_iterator<int>(ss), istream_iterator<int>(), back_inserter(Tokens)); 
संबंधित मुद्दे