有没有办法读取与“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)。

+0

没有,'ifstream'被设计为读取文件。如果要将'std :: string'作为'istream'提供,你可以使用['std :: stringstream'](http://en.cppreference.com/w/cpp/io/basic_istringstream)。 –

+1

['std :: istringstream'](http://en.cppreference.com/w/cpp/io/basic_istringstream) – Justin

+0

完全不清楚你要求什么。你得到的字符串是作为你程序的参数读取的,还是你想将一个文件的内容读入一个'std :: string'? – user0042

让我得到这个直:

  1. 你从标准输入读取一个字符串
  2. 你把它写入一个文件
  3. 然后,从该文件
  4. 阅读并使用文件流对象创建一个字符串

这是疯了话!

删除该文件流,并直接从STDIN只是实例化字符串:

string s(
    (std::istreambuf_iterator<char>(std::cin)), 
    std::istreambuf_iterator<char>() 
); 

记住,std::cinstd::istream,标准库的输入输出流部分是专为这种通用数据访问。

但请注意,your approach with std::istreambuf_iterator is not the most efficient,如果您正在阅读大量数据,这可能是一个问题。

如果我把它正确的话,你想阅读所有通过标准输入提供的文字到一个字符串。

实现此目的的一种简单方法可能是使用std::getline,它将所有字节直到特定分隔符都读入字符串中。如果你可以认为它是文本内容(不包含任何\0个字符数),你可以写:

std::string s; 
std::getline(cin,s,'\0');