提取运算符到非数字字符

Extraction operator into non-numeric character

给定一个 istringstream,是否可以将其内容 "extract" 转换为一个字符 只有当要提取的字符是非数字的(即不是 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'数字。

为了提供一些上下文,我需要它来制作递归 "normal polish notation"(即前缀表示法)解析器。

您可以使用 istream::peek 在提取之前检查下一个字符是什么。您可以根据您的可接受范围测试 peek 的结果,如果匹配,则进行实际提取。

顺便说一句,如果您想跳过空格,您还需要使用 peek() 检查并处理它(通过提取和丢弃空格字符)。即使使用 skipwspeek() 也不会越过空格。

如果是数字,可以用unget把字符放回去。

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

char c;
iss >> skipws >> c;
if (std::isdigit(c)) iss.unget();