0

我编写了一个程序,它接受它的第一个参数并反转字母。因此,例如:

revstr cat

会产生tac

现在我希望当文件被重定向时它可以工作。所以,如果filler.txt是一个包含“现在是所有好人来帮助他们的国家的时候了!”的文件,那么:

revstr < filler.txt

应该产生:

!yrtnuoc rieht fo dia eht ot emoc ot nem doog lla rof emit eht si woN

但我不知道如何检测这种重定向正在发生!

这是我尝试过的 - 显然,这不好。我哪里错了?

int main(int argc, char* argv[]) {
string temp,input,output;//store input from file, and get which file//

ofstream out("output.txt");

if(argc == 3)
{
    if(ifstream(argv[2]))
    {
        input = argv[2];
        ifstream in(input);
        while(in.good())
        {
            in >> temp;
            ReverseWord(temp);
            cout << temp << endl;
            out << temp << endl;
        }
    }
    else
        ReverseWord(argv[2]);


    }
    else
}

我对 C++ 还很陌生,并且正在尽我最大的努力学习。

4

2 回答 2

4

您有两种可能的方法(好吧,您甚至可以同时支持这两种方法):

  1. 您可以接受文件名作为命令行参数(使用接受参数的 main),然后使用该文件名作为要读取的流打开一个 ifstream。用户像使用你的程序一样revstr filename.txt
  2. 您可以从 std::cin 读取您的输入。然后用户需要使用重定向向您传递文件的内容。如果您的程序是使用: 启动的revstr < filename.txt,那么从 std::cin 读取将读取文件的内容。该程序甚至从未看到文件名。

如果你得到一个论点,你可以通过从 ifstream 中读取来支持这两者,如果你没有得到论点,你可以从 cin 中读取。读取的函数可以获取作为通用 istream& 传入的蒸汽。

于 2013-01-26T00:23:08.330 回答
0

您应该更改main()函数的定义,以便它接受从命令行传递的参数:

int main(int argc, char* argv[])

第一个变量将保存提供的命令行参数的数量,第二个变量是一个向量,其元素是指向以 NULL 结尾的字符串的指针。这些字符串本身就是命令行参数。请记住,第一个字符串将始终是可执行文件的名称。

例如,假设要打开的文件的名称将作为第一个参数传递:

int main(int argc, char* argv[])
{
    std::string filename;
    if (argc > 1)
    {
        // Oh, there's some command line arguments here...
        filename = argv[0];
    }

    // Go on processing...
}
于 2013-01-26T00:11:45.557 回答