将运算符提取为非数字字符

时间:2018-09-22 13:28:34

标签: c++ istringstream

给定istringstream,仅当要提取的字符为非数字字符(即非0-9)时,才可以将其内容“提取”为字符吗? / p>

例如,这个

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',< em>是数字

为了提供一些背景信息,我需要使用它来创建递归的“常规修饰符”(即前缀表示法)解析器。

2 个答案:

答案 0 :(得分:2)

如果字符是数字,则可以使用unget放回字符。

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

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

答案 1 :(得分:1)

您可以使用 void LinkedList::Append(Bid bid) { // FIXME (3): Implement append logic //reference bid being passed??? Bid struct has pointers, do we need another pointer? Bid *currNode = &bid; //set node's next pointer to NULL (end) currNode->next = NULL; //if list is empty if (head == NULL) { head = currNode; tail = currNode; } else { tail->next = currNode; tail = currNode; } } 检查下一个字符,然后再提取它。您可以在可接受的范围内测试istream::peek的结果,如果匹配,则进行实际提取。

顺便说一句,如果要跳过空格,还需要使用peek进行检查和处理(通过提取和丢弃空格字符)。即使使用peek()skipws也不会窥视空白。