Как сделать разбор istringstream C ++?

Мне нужно напечатать некоторые данные из потока — istringstream (в main ()).

пример:

void Add ( istream & is )
{
string name;
string surname;
int data;

while ( //something )
{
// Here I need parse stream

cout << name;
cout << surname;
cout << data;
cout << endl;
}

}

int main ( void )
{
is . clear ();
is . str ( "John;Malkovich,10\nAnastacia;Volivach,30\nJohn;Brown,60\nJames;Bond,30\n" );
a . Add ( is );
return 0;
}

Как сделать разбор этой строки

is.str ("John;Malkovich,10\nAnastacia;Volivach,30\nJohn;Brown,60\nJames;Bond,30\n");"

в name;surname,data?

0

Решение

Это несколько хрупко, но если вы знаете, что ваш формат именно так что вы написали, в этом нет ничего плохого:

while(getline(is, name, ';') && getline(is, surname, ',') && is >> data)
{
is.ignore();    //  ignore the new line
/* ... */
}
1

Другие решения

Если вы знаете, разделители всегда будут ; а также ,, это должно быть довольно просто:

string record;
getline(is, record); // read one line from is

// find ; for first name
size_t semi = record.find(';');
if (semi == string::npos) {
// not found - handle error somehow
}
name = record.substr(0, semi);

// find , for last name
size_t comma = record.find(',', semi);
if (comma == string::npos) {
// not found - handle error somehow
}
surname = record.substr(semi + 1, comma - (semi + 1));

// convert number to int
istringstream convertor(record.substr(comma + 1));
convertor >> data;
0

По вопросам рекламы [email protected]