ホームページ > バックエンド開発 > C++ > C でコマンドライン引数を効率的に解析するにはどうすればよいですか?

C でコマンドライン引数を効率的に解析するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-27 07:31:09
オリジナル
567 人が閲覧しました

How to Efficiently Parse Command Line Arguments in C  ?

C でのコマンド ライン引数の解析

プログラミングの世界では、特に複雑な入力を扱う場合、コマンド ライン引数の解析が課題となることがよくありますパターン。次の形式の引数を受け入れるプログラムを考えてみましょう:

prog [-abc] [input [output]]
ログイン後にコピー

質問:

組み込み関数を使用して C でこのようなコマンド ライン引数を効率的に解析するにはどうすればよいですか?関数またはカスタム コード?

ブーストとGNU:

boost::program_options と GNU getopt を利用するために提供される提案は、信頼できるオプションです。これらのライブラリは、コマンド ライン引数の幅広いシナリオを処理するための堅牢な機能を提供します。

標準ライブラリのアプローチ:

ただし、より単純な状況の場合は、std::find 関数を使用します。引数を解析する簡単な方法を提供します。このアプローチにより、特定のフラグを検索したり、-f 引数に続いてファイル名を取得したりできます。

#include <algorithm>

char* getCmdOption(char ** begin, char ** end, const std::string & option)
{
    char ** itr = std::find(begin, end, option);
    if (itr != end &amp;&amp; ++itr != end)
    {
        return *itr;
    }
    return 0;
}
ログイン後にコピー

カプセル化されたコード:

コードの可読性と保守性を向上させるには、解析ロジックを専用のファイルにカプセル化できます。 class.

class InputParser{
    public:
        InputParser (int &amp;argc, char **argv){
            for (int i=1; i < argc; ++i)
                this->tokens.push_back(std::string(argv[i]));
        }
        const std::string&amp; getCmdOption(const std::string &amp;option) const{
            std::vector<std::string>::const_iterator itr;
            itr =  std::find(this->tokens.begin(), this->tokens.end(), option);
            if (itr != this->tokens.end() &amp;&amp; ++itr != this->tokens.end()){
                return *itr;
            }
            static const std::string empty_string("");
            return empty_string;
        }
        bool cmdOptionExists(const std::string &amp;option) const{
            return std::find(this->tokens.begin(), this->tokens.end(), option)
                   != this->tokens.end();
        }
    private:
        std::vector <std::string> tokens;
};
ログイン後にコピー

結論:

これらのメソッドは、単純なシナリオとより複雑なシナリオの両方に対応して、 C でコマンド ライン引数を解析する効率的な方法を提供します。コードの単純さ、柔軟性、パフォーマンスに関する特定の要件に最も適したアプローチを選択してください。

以上がC でコマンドライン引数を効率的に解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート