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
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