c++ - 使用 istream_iterator 并从标准输入或文件中读取

标签 c++ file stdin istream-iterator

我正在使用 Microsoft Visual C++ 编写程序,我希望我的程序使用 istream_iterator 从标准输入或文件中读取。谷歌搜索互联网并没有显示我认为它必须多么简单。因此,例如,我可以很容易地编写并从标准输入中读取:

#include <iostream>
#include <string>
#include <iterator>

using namespace std;

int main()
{
   istream_iterator<string> my_it(cin);
   for (; my_it != istream_iterator<string>(); my_it++)
      printf("%s\n", (*my_it).c_str());
}

或者我可以写这个并从文件中读取:

#include <iostream>
#include <string>
#include <iterator>
#include <fstream>

using namespace std;

int main(int argc, char** argv)
{
   ifstream file(argv[1]);
   istream_iterator<string> my_it(file);
   for (; my_it != istream_iterator<string>(); my_it++)
      printf("%s\n", (*my_it).c_str());
}

但我如何将这两者结合起来,以便一个简单的 (argc == 2) 检查让我用文件流或标准输入初始化我的输入流迭代器,然后继续我的快乐方式?

最佳答案

可以在构造迭代器后赋值给它:

int main(int argc, char** argv)
{
   ifstream file;
   istream_iterator<string> my_it;

   if(argc == 2) {
      file.open(argv[1]);
      my_it = istream_iterator<string>(file);
   } else {
      my_it = istream_iterator<string>(cin);
   }
}

关于c++ - 使用 istream_iterator 并从标准输入或文件中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1911822/

相关文章:

c# - 使用 System.Diagnostics.Process 运行 vb 脚本,但仅部分成功地将输入文本输入到进程的标准输入

c++ - C++中元组元素类型的大小总和

c - 如何在 C 中的标准输入上使用 fgets() 而不是 fscanf()?

c++ - 如何防止 std::thread 在 QT 中卡住 GUI?

php - 获取文件扩展名(基本名称?)

iOS 从文件中读取

linux - 我如何在 Linux 中执行单向差异?

c++ - std::string 在 std::cin 的 4095 个字符后被截断

c++ - 使用 gtest & gmock 验证程序调用

c++ - 开始客户端/服务器网络编程的好地方?