2012-10-15 9 views

Odpowiedz

3

Niestety, nie ma sposobu na wielokrotne "zakończenia linii". Co możesz zrobić, to przeczytać wiersz z np. std::getline i umieść go w std::istringstream i użyj std::getline (z separatorem ';') w pętli na istringstream.

Chociaż można sprawdzić bibliotekę Boost iostreams, aby ją wyświetlić, ma ona funkcjonalność.

+0

OK, dzięki, to całkiem miłe! Napisałem pętlę, która std :: stringstream.put(): ed każdego znaku dopóki nie odnalazł '\ n' lub ';', a następnie użył stringstream.str(), aby uzyskać ciąg znaków. – Erika

3

Jest std::getline. Dla bardziej złożonych scenariuszy można spróbować podzielić istream_iterator lub istreambuf_iterator z boost split lub regex_iterator (here is an example korzystania z iteratorów strumieniowych).

+2

'std :: getline' jest dobry, ponieważ ma przeciążenia dla' std : string', który sprawia, że ​​string we/wy jest znacznie, znacznie łatwiejszy (przynajmniej moim zdaniem). – dreamlax

+2

'std :: getline' nie pomaga w tym przypadku, gdy OP chce mieć wiele linii zakończeń/separatorów. –

0

Oto realizacja pracy:

enum class cascade { yes, no }; 
std::istream& getline(std::istream& stream, std::string& line, const std::string& delim, cascade c = cascade::yes){ 
    line.clear(); 
    std::string::value_type ch; 
    bool stream_altered = false; 
    while(stream.get(ch) && (stream_altered = true)){ 
     if(delim.find(ch) == std::string::npos) 
      line += ch; 
     else if(c == cascade::yes && line.empty()) 
      continue; 
     else break; 
    } 
    if(stream.eof() && stream_altered) stream.clear(std::ios_base::eofbit); 
    return stream; 
} 

Opcja cascade::yes wali kolejne separatory znalezione. Przy cascade::no, zwróci pusty łańcuch dla każdego znalezionego drugiego wyznaczonego delimetru.

Zastosowanie:

const std::string punctuation = ",.';:?"; 
std::string words; 
while(getline(istream_object, words, punctuation)) 
    std::cout << word << std::endl; 

zobaczyć jego wykorzystanie Live on Coliru

Bardziej rodzajowy wersja będzie this

Powiązane problemy