【问题标题】:Possible to iterate through characters in stringstream without changing its state?可以在不改变其状态的情况下遍历字符串流中的字符吗?
【发布时间】:2016-11-12 15:48:58
【问题描述】:

给定一个stringstream ss,有没有一种巧妙的方法来遍历当前在其中的字符,而不改变其状态?

当然,我可以 stringstream ss2(ss.str()) 然后吃掉 ss2 中的字符,但我希望有办法避免创建中间字符串,因为我的 ss 可能包含数百万个字符。


背景:我将一些数据编码为ss,并希望在将其写入磁盘文件之前附加一个CRC。它用于计算我想要遍历ss 的 CRC。道德上的做法可能是继承 stringstream 并动态维护 CRC,但这对于我的直接目的来说感觉太麻烦了。

【问题讨论】:

  • 也许重新设计已经到位?就像在另一个容器中拥有所有字符(std::string 最有可能)并在容器上执行所有操作并在实际需要时将其写入流?

标签: c++ c++11 stringstream


【解决方案1】:

std::stringstream 使用std::stringbuf 作为其流缓冲区。 std::stringbuf 是可查找的,就像普通文件一样。

您可以根据自己的意愿遍历缓冲的字符串,然后返回缓冲区的开头或字符串中的其他位置,然后将时钟倒回到原来的位置。

【讨论】:

    猜你喜欢
    • 2022-11-11
    • 2022-01-16
    • 2023-01-30
    • 2018-11-12
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 2014-12-30
    • 2011-11-14
    相关资源
    最近更新 更多