gpt4 book ai didi

c++ - istringstream - 为什么没有重置功能

转载 作者:行者123 更新时间:2023-11-30 03:40:17 33 4
gpt4 key购买 nike

以下是我的代码的简化版本:

#include <iostream>
#include <string>
#include <sstream>

int main() {
std::istringstream f;

f.clear();
std::string s("line1");
f.str(s);
std::string line;
while (std::getline(f, line)) {
std::cout << line << std::endl;
}

f.clear(); // must both clear() and str()
f.str(s);
while (std::getline(f, line)) {
std::cout << line << std::endl;
}

return 0;
}

我的问题是围绕这两行:

f.clear();     // must both clear() and str()
f.str(s);

调用 f.str(s) 对我来说是有问题的,但我发现只要调用 clear() 就可以结束 getline() 之后调用不会读取任何内容。

我查看了 istringstream 接口(interface),没有看到任何重置类型的功能,但只是问问以防我遗漏了什么。

str() 对我不起作用的原因 - 我的类将 istream* 作为输入,它没有真正的原始文件或字符串。

最佳答案

不是很清楚你想要完成什么,但是如果你想再次读取同一个流,一个istringstream就是一个istream,而 seekg 以正常方式工作。

这会打印两次“line1”:

int main() {
std::istringstream f;
f.clear();
std::string s("line1");
f.str(s);
std::string line;
while (std::getline(f, line)) {
std::cout << line << std::endl;
}
f.clear();
f.seekg(0);
while (std::getline(f, line)) {
std::cout << line << std::endl;
}
}

关于c++ - istringstream - 为什么没有重置功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38148193/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com