2012-10-16 13 views
5

उदाहरण के लिए, जब एक पाठ फ़ाइल को पार्स, कुछ समय के लिए इस फ़ाइल सामान इस तरह है:कैसे जांचें कि स्ट्रिंगस्ट्रीम >> स्ट्रिंग स्ट्रिंग पर कुछ नहीं रखेगी?

keyword a string here 
keyword another string 
keyword 
keyword again a string 

ध्यान दें कि 3th लाइन में रिक्त स्ट्रिंग (कुछ भी नहीं या सफेद रिक्त स्थान) .. बात है कि जब आप स्ट्रिंगस्ट्रीम करें >> laststring, और स्ट्रिंगस्ट्रीम में एक खाली स्ट्रिंग (शून्य या सिर्फ सफेद स्थान) है, यह "laststring" को ओवरराइट नहीं करेगा, यह कुछ भी नहीं करेगा। हाथ से पहले इस स्थिति की जांच करने के लिए वैसे भी है? मैं सिर्फ एक स्ट्रैप खाली स्ट्रिंग बनाना नहीं चाहता हूं, यह जांचने के लिए कि स्ट्रिंगस्ट्रीम के बाद भी यह खाली है >> लंगड़ा लगता है।

उत्तर

15

आप धारा से नहीं पढ़ सकते हैं जब - जब वापस आ जाएगी bool कास्टिंग तो अपने राज्य में परिवर्तन झूठी:

bool read = (ss >> laststring); 

देखें ideone example

+0

निंजा! यह है, मैं बस जवाब स्वीकार करने के लिए 5 मिनट इंतजार कर रहा हूँ। – Icebone1000

1

आप केवल कि क्या वहाँ कुछ था पढ़ने के लिए प्रयास करने के बाद पता कर सकते हैं या नहीं। क्या आप ऐसा करने में सक्षम हो सकता है खाली स्थान के छोड़ सकते हैं और देखने के लिए वहाँ है अगर अगले स्थान में एक गैर जगह नहीं है:

if ((in >> std::ws).peek() != std::char_traits<char>::eof()) { 
    ... 
} 

यह देखते हुए कि रिक्त स्ट्रिंग बनाने के लिए सस्ती होती हैं, मैं परेशान और पढ़ने की कोशिश नहीं होता स्ट्रिंग। नोट, हालांकि, धाराओं से पढ़ना लाइन आधारित नहीं है, यानी, ऊपर दिए गए मामले में आपको लाइनों को पहले विभाजित करने या लाइन के दूसरे भाग को पढ़ने के लिए std::getline() जैसे कुछ का उपयोग करने की आवश्यकता है।

+0

प्रश्न के शब्द से, मुझे लगता है कि उसके पास पहले से ही 'गेटलाइन' है, और स्ट्रिंगस्ट्रीम से पढ़ रहा है। अन्यथा, पढ़ना "खाली स्ट्रिंग" नहीं होगा और अगली पंक्ति में जाएगा। –

+0

@MooingDuck: ठीक है, क्योंकि वह एक खाली स्ट्रिंग बनाने के बारे में चिंतित है, ऐसा लगता है कि पहले एक पंक्ति में पढ़ना अजीब लगता है ;-) उसने कहा, मैंने एक पंक्ति को पढ़ने के रूप में प्रश्न पढ़ा। अन्यथा व्हाइटस्पेस छोड़ना काम नहीं करेगा, या तो। –

0

आप फ़ाइल से लाइन पढ़ने के लिए गेटलाइन का उपयोग कर सकते हैं। फिर, लाइन को एक स्ट्रिंग स्ट्रीम में कॉपी करें और स्ट्रिंग स्ट्रीम से शब्दों को एक समय में पढ़ें। लाइनें/शब्दों से बाहर होने पर स्ट्रीम स्वचालित रूप से पढ़ना बंद कर देंगे।

// open file 
std::ifstream fin("text.txt"); 

// 'iterate' through all the lines in the file 
unsigned lineCount = 1; 
std::string line; 
while (std::getline(fin, line)) 
{ 
    // print the line number for debugging 
    std::cout << "Line " << lineCount << '\n'; 

    // copy line into another stream 
    std::stringstream lineStream(line); 

    // 'iterate' through all the words in the line 
    unsigned wordCount = 1; 
    std::string word; 
    while (lineStream >> word) 
    { 
     // print the words for debugging 
     std::cout << '\t' << wordCount++ << ' ' << word << '\n'; 
    } 
} 

आप iostream, fstream, sstream और string शामिल करने के लिए की जरूरत है।

+0

मैं बहुत कुछ कर रहा हूं, जो मुझे नहीं पता था, ऑपरेशन की जांच बूल के रूप में है। – Icebone1000