将cin重定向到字符串

时间:2011-02-07 18:49:01

标签: c++ iostream

我希望cin从字符串中读取输入。

有没有办法让它这样做?

这样的事情:

const char * s = "123 ab";
cin.readFrom(s);//<---- I want something like this

int i;
cin>>i;

cout<<i; //123

4 个答案:

答案 0 :(得分:5)

像这样:

#include <sstream>
#include <iostream>

std::istringstream stream("Some string 123");
streambuf* cin_backup = std::cin.rdbuf(stream.rdbuf());

如果您想再次使用它,您可能需要备份std :: cin的原始rdbuf。

答案 1 :(得分:5)

我建议使用字符串流。您可以像使用标准输入/标准输出那样使用重载的I / O运算符。像这样:

string tempString = "123 ab";
int firstArg;
string secondArg;

stringstream stream(tempString);

stream >> firstArg >> secondArg;

cout << firstArg << " " << secondArg;

我个人觉得这比阅读标准字符串然后使用标准的I / O运算符要清楚得多一些,但也许有一个原因你想先把它读成标准我不喜欢意识到。

希望这有帮助!

答案 2 :(得分:1)

尝试类似:

stringbuf s = string("123 ab");
cin.rdbuf(&s);

答案 3 :(得分:0)

在C ++ 17中,Ben Voigt的解决方案将无法编译,除非您使用select split_part(type, '_'::text, 1) || '_' || split_part(type, '_'::text, 3) as dtype 。而是使用下面的那个:

basic_stringbuf