【问题标题】:Using stringstream as a stack of strings使用 stringstream 作为字符串堆栈
【发布时间】:2021-06-25 06:43:16
【问题描述】:

我正在尝试做类似的事情:

std::vector<std::string> firstLevel = {...}; //some strings
std::vector<std::string> secondLevel = {...}; //some strings
std::stringstream strm;
std::string garbage;
for (std::string i : firstLevel){
        strm << i << "/";
        for (std::string j : secondLevel){
            strm << j;
            std::cout << strm.str() << std::endl; // print the whole string
            strm >>garbage; //somthing similar to "pop" is required here
        }
        strm >>garbage; //somthing similar to "pop" is required here
}

但是它将整个字符串从“strm”中取出,我希望它简单地取出最后插入的字符串。 有没有办法将插入的最后一个字符串(使用“

提前致谢

【问题讨论】:

  • 这是一个字符流,而不是字符串,并且没有“内存”。这看起来像 XY problem - 你的最终目标是什么?
  • 我编辑了我的问题。希望现在更清楚了。
  • 您可以通过在字符串之间插入一个或多个空格来分隔字符串。但是,您的 stringstream 对象将 不是 是堆栈 (LIFO);它将是先进先出 (FIFO)。如果你想要一个堆栈,那么也许使用std::stack?
  • 接近想要使用 int 的向量来处理映射字符串 -> 浮点数。可能需要做很多工作,但这不是一个合适的工具。如果您真的想这样做,您可以使用整数向量来存储字符串在字符串流中的位置并在字符串流中查找。但是真的不直接使用一堆字符串的理由是什么???
  • 这仍然是XY problem 的经典示例。您在某些奇怪的上下文中使用stringstream,但您没有解释这段代码应该做什么。如果我们知道你在做什么,很可能没有人会建议使用std::stingstream

标签: c++ stack std stringstream


【解决方案1】:

如果我理解正确,您想重置std::stringstream。为此,您可以使用 str() 方法。当您使用它(无参数)时,它只返回内容,但如果您将字符串传递给它,其内容将重置为字符串。因此,如果您想清除字符串流,您只需:

strm.str("");

【讨论】:

    猜你喜欢
    • 2013-09-04
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 2013-01-25
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多