给定 例如,这个 应该提取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>是数字
为了提供一些背景信息,我需要使用它来创建递归的“常规修饰符”(即前缀表示法)解析器。
答案 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
也不会窥视空白。