有没有办法用" ifstream"读取输入字符串?

时间:2017-07-06 18:29:48

标签: c++ string file format ifstream

目前我的程序使用字符串作为输入,我使用argc and argv

访问

然后我用

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)。

2 个答案:

答案 0 :(得分:1)

让我直截了当地说:

  1. 您从标准输入中读取字符串
  2. 您将其写入文件
  3. 然后您从文件
  4. 中读取它
  5. 并使用文件流对象创建字符串
  6. 那个疯狂的谈话!

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

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

    请记住,std::cinstd::istream,标准库的IOStreams部分是为这种通用数据访问而设计的。

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

答案 1 :(得分:0)

如果我说得对,那么你想把通过标准输入提供的所有文本都读成字符串。

实现这一目标的一种简单方法可能是使用std::getline,它将特定分隔符的所有字节读取到字符串中。如果您认为它是文本内容(不包含任何\0 - 字符),您可以编写以下内容:

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