Оператор извлечения в нечисловой символ - PullRequest
0 голосов
/ 22 сентября 2018

Учитывая istringstream, возможно ли "извлечь" его содержимое в символ , только если извлекаемый символ не является числовым (то есть не 0-9)?

Например, этот

string foo = "+ 2 3";
istringstream iss(foo);

char c;
iss >> skipws >> c;  //Do this only if c would be non-numeric

должен извлечь '+', но если foo было "2 + 3", он не должен ничего извлекать, поскольку первый символ [без пробелов] - '2', который является числовым.

Чтобы получить некоторый контекст, мне нужно это сделать для создания рекурсивного синтаксического анализатора "нормальной польской нотации" (т.е. префиксной нотации).

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

Вы можете использовать unget для возврата символа, если он числовой.

string foo = "+ 2 3";
istringstream iss(foo);

char c;
iss >> skipws >> c;
if (std::isdigit(c)) iss.unget();
0 голосов
/ 22 сентября 2018

Вы можете использовать istream::peek, чтобы проверить, каким будет следующий символ перед его извлечением.Вы можете проверить результат peek в соответствии с допустимым диапазоном, и, если он совпадает, выполнить фактическое извлечение.

Кстати, если вы хотите пропустить пробел, вам также необходимо проверить и обработать егос peek() (путем извлечения и удаления пробельных символов).Даже с skipws, peek() не заглянет за пробел.

...