在C ++中是否可以将stdin重定向到C ++中的字符串?
使用freopen我可以将stdin重定向到文件,因此scanf和cin都将使用该文件的内容。 使用stringstream和cin.rdbuf()进行操作我可以将cin重定向到该字符串,因此对cin的任何调用都将与我的字符串一起使用。但是scanf将继续使用以前的输入流。 我想这可能与Unix的管道有关,但它在Windows下不可用。
是否有可能以便携方式解决这个问题?
答案 0 :(得分:0)
这不是最好的方法,但你可以使用这样的东西:
// warning - has side effects (sets noskipws) but we don't care (its an example)
ostream& operator<< (ostream& out, istream& in)
{
in >> noskipws;
char c;
in >> c;
while (in)
{
out << c;
in >> c;
}
return out;
}
int main()
{
ostringstream inputstr;
inputstr << cin;
inputstr.str(); // contains all data from stdin
return;
}
答案 1 :(得分:0)
假设C和C ++标准流都是同步的,则以下内容应该有效:
class save_buffer
{
public:
save_buffer(std::ios& str) :
my_str(str),
m_sbuf(str.rdbuf())
{ }
~save_buffer()
{
m_str.rdbuf(m_sbuf);
}
private:
std::ios& m_str;
std::streambuf* m_sbuf;
};
int main()
{
std::istringstream buf;
save_buffer sb(std::cin);
std::cin.rdbuf(buf.rdbuf());
}