gpt4 book ai didi

C++:如何使用cin和file两种方式获取输入?

转载 作者:太空宇宙 更新时间:2023-11-04 03:49:02 27 4
gpt4 key购买 nike

我编写了一个C++程序,它可以从文件中获取信息,但它必须支持两种读取数据的方式。

第一种方法是将文件名作为命令行参数传递:./a.out a.txt

第二个是通过从管道读取:cat a.txt | ./a.out

第二种方式对我来说更重要,也更困难。怎么办?

以下是我的问题的详细信息:

有一个类,我这样定义:

API_EXPORT SamReader 类{

// constructor / destructor

公开: SamReader(无效); ~SamReader(void);

// closes the current SAM file
bool Close(void);
// returns filename of current SAM file
const std::string GetFilename(void) const;

// return if a SAM file is open for reading
bool IsOpen(void) const;

// opens a SAM file
// *** HERE IS MY QUESTION
bool Open(const std::string& filename);
bool Open(std::istream cin); //HERE~~~~

// retrives next available alignment
bool LoadNextAlignment(BamAlignment& alignment);

私有(private): 内部::SamReaderPrivate * d;};

我已经找到了输入文件并获取结果的方法,但是我需要在此类中添加一个 func,使其可以从标准输入输入...

感谢您的帮助,我是这里的新人,我非常感谢刚才帮助我的人。

最佳答案

要从管道读取,您的程序只需要从标准输入读取即可。如果你运行 a | 这就是 shell 中的管道的工作原理。 b,它只是将 a 的 stdout 上的所有输出传递到 b 的 stdin。

所以基本上你的程序需要涵盖两种情况:(1) 如果提供了文件,则从文件中读取;(2) 否则从标准输入中读取。

为了避免代码重复,最简单的方法始终是从 stdin 读取。这显然涵盖了(2)。为了涵盖 (1),当将文件作为参数提供时,请使用 freopen 使用该文件覆盖 stdin。

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

using namespace std;

int main(int argc, char** argv) {
if (argc > 1) {
freopen(argv[1], "r", stdin);
}

string s;
while (cin >> s) {
cout << s << endl;
}

return 0;
}

演示其工作原理

$ g++ test.cc
$ cat content
This
is
a
test
$ ./a.out content
This
is
a
test
$ cat content | ./a.out
This
is
a
test

关于C++:如何使用cin和file两种方式获取输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27013777/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com