【发布时间】:2020-12-16 21:51:42
【问题描述】:
我必须从输入流中读取一些数据,通过一些过滤器运行它,然后在屏幕上显示上下文。我正在使用 Windows,目前坚持这一点。我很难理解 I/O 流。
我不知道在通过第一个过滤器传递数据后我应该做什么,因为目前,第二个函数计算 0 个字符?
主要:
std::ifstream data("somedata.txt");
whitesprem(data);
calc_chars(data);
whitesprem:
// removes extra white spaces
void whitesprem(std::ifstream& fff) {
std::string line;
while(std::getline(fff, line)){
std::regex rgx("\\s{2,}");
line = std::regex_replace(line, rgx, " ")
//How to move on?
}
}
【问题讨论】:
-
如果您想从流中过滤字符,您应该查看
streambuf类。stream派生类没有您正在寻找的功能。 -
在上面做一点扩展。
stream派生类包装streambuf派生类。所有stream类真正做的是包装不同的streambuf派生类并提供一些更高级别的I/O 方法。实际的低级 I/O 由streambuf派生类完成。所以如果你想写一个过滤后的流,方法是写一个streambuf派生类来做过滤。然后你可以有一个streambuf派生类链,每个派生类都执行一些操作(过滤、转换或其他),直到链中的最后一个streambuf执行实际的 I/O。 -
最后,您编写了一个
stream派生类,它包装了链中的第一个streambuf以提供熟悉的更高级别的 I/O 操作。