我想要实现的是使用标准的std :: cout,如果你理解,将输出反转为输入,这样我程序的另一部分就可以读取它。不,我不能只在程序的其他部分调用一个函数,因为每个函数都必须保持私有,所以这似乎是唯一的方法。通过将默认输出流重定向到我自己的自定义输出流,我在java中做了类似的事情,但我对c ++有点新鲜。这就是我在java中所做的:
System.setOut(customPrintStream);
有没有人知道c ++的替代方法或者获取打印到控制台的任何内容?
答案 0 :(得分:2)
c ++标准库支持“反向迭代器”的概念。
#include <iostream>
#include <string>
#include <iterator>
#include <algorithm>
int main()
{
auto s = std::string("Hello, World");
std::copy(std::rbegin(s), std::rend(s),
std::ostream_iterator<char>(std::cout));
std::cout << std::endl;
return 0;
}
预期产出:
dlroW ,olleH
答案 1 :(得分:0)
C ++中的流读取和写入std::streambuf
个对象。您可以使用std::ostream
函数替换rdbuf()
对象的流缓冲区。例如,要捕获std::cout
中写入std::string
的所有输出,您可以使用以下内容:
std::ostreamstream stream;
std::streambuf* sbuf = std::cout.rdbuf(stream.rdbuf());
// use code whose output is written to `std::cout`
std::cout.rdbuf(sbuf); // restore the original stream buffer
std::string output = stream.str();
在实际实现中,您可能使用RAII方法来替换/恢复流缓冲区。此外,您可能希望使用自定义流缓冲区而不是std::stringbuf
,但基本保持原样。