有没有办法读取与“ifstream的”
问题描述:
目前我的程序接受一个字符串输入的输入字符串,我访问使用argc and argv
有没有办法读取与“ifstream的”
然后我用
FILE *fp, *input = stdin;
fp = fopen("input.xml","w+b");
while(fgets(mystring,100,input) != NULL)
{
fputs(mystring,fp);
}
fclose(fp);
我做了这部分只创建一个文件的input.xml我再提供给
ifstream in("input.xml");
string s((std::istreambuf_iterator<char>(in)), std::istreambuf_iterator<char>());
得到s
作为字符串(基本字符串)。 有没有办法将我的输入直接输入到ifstream
? (即将一个字符串送入ifstream
)。
答
让我得到这个直:
- 你从标准输入读取一个字符串
- 你把它写入一个文件
- 然后,从该文件
- 阅读并使用文件流对象创建一个字符串
这是疯了话!
删除该文件流,并直接从STDIN只是实例化字符串:
string s(
(std::istreambuf_iterator<char>(std::cin)),
std::istreambuf_iterator<char>()
);
记住,std::cin
是std::istream
,标准库的输入输出流部分是专为这种通用数据访问。
但请注意,your approach with std::istreambuf_iterator
is not the most efficient,如果您正在阅读大量数据,这可能是一个问题。
答
如果我把它正确的话,你想阅读所有通过标准输入提供的文字到一个字符串。
实现此目的的一种简单方法可能是使用std::getline
,它将所有字节直到特定分隔符都读入字符串中。如果你可以认为它是文本内容(不包含任何\0
个字符数),你可以写:
std::string s;
std::getline(cin,s,'\0');
没有,'ifstream'被设计为读取文件。如果要将'std :: string'作为'istream'提供,你可以使用['std :: stringstream'](http://en.cppreference.com/w/cpp/io/basic_istringstream)。 –
['std :: istringstream'](http://en.cppreference.com/w/cpp/io/basic_istringstream) – Justin
完全不清楚你要求什么。你得到的字符串是作为你程序的参数读取的,还是你想将一个文件的内容读入一个'std :: string'? – user0042