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

考えられるアプローチは2つあります(両方をサポートすることもできます)。

  1. (引数を受け入れるmainを使用して)コマンドライン引数としてファイル名を受け入れてから、このファイル名を読み取るストリームとして使用してifstreamを開くことができます。ユーザーはのようにプログラムを使用しますrevstr filename.txt
  2. std::cinから入力を読み取ることができます。次に、ユーザーはリダイレクトを使用してファイルの内容を渡す必要があります。プログラムが:を使用して開始された場合、revstr < filename.txtstd :: cinから読み取ると、ファイルの内容が読み取られます。プログラムはファイル名を見ることさえありません。

引数を取得した場合はifstreamから読み取り、引数を取得しなかった場合はcinから読み取ることで両方をサポートできます。読み取りを行う関数は、一般的なistream&として蒸気を渡すことができます。

于 2013-01-26T00:23:08.330 に答える
0

main()コマンドラインから渡された引数を受け入れるように、関数の定義を変更する必要があります。

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

最初の変数は、提供されたコマンドライン引数の数を保持します。2 番目の変数は、要素が 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 に答える