【问题标题】:stringstream and str not synchronizedstringstream 和 str 不同步
【发布时间】:2014-12-14 18:37:58
【问题描述】:

我正在用 C++ 编写一个简单的解析器。 我想用std::ws 删除前导空格。

bool            Parser::readWhiteSpace()
{
  std::cout << "Before : str=[" << this->_ss.str() << "], peek=[" << (char)this->_ss.peek() << ']'<< std::endl;
  this->_ss >> std::ws;
  std::cout << "After : str=[" << this->_ss.str() << "], peek=[" << (char)this->_ss.peek() << ']'<< std::endl;                                                                                                                                          

  return (true);
}

输出是:

Before : str=[   something], peek=[ ]
After :  str=[   something], peek=[s]

我不明白为什么流和流中的 str 不同步。 它不应该影响 str 吗?

【问题讨论】:

  • str() 返回整个缓冲区,“get”指针简单地移向下一个非空白字符,因此您只会在下一次读取时看到差异。
  • 您可以从删除函数名中的前导空格开始!

标签: c++ string parsing stringstream


【解决方案1】:

字符串流有一个指针,即输出位置指示器,它指向“下一个”字符。通过修剪前导空白,后备缓冲区本身不会被修改,但这个位置指示符会增加。 std::ws 读取一个字符,直到它是一个空格,因此您最后一瞥会发现这个指示符指向 s

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 2018-12-03
    相关资源
    最近更新 更多