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

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

Susan Sarandon
リリース: 2024-12-06 14:28:14
オリジナル
551 人が閲覧しました

How Can I Efficiently Parse Command-Line Arguments in C  ?

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

プログラムを実行するとき、多くの場合、コマンドライン引数を指定する必要があります。これらの引数は、プログラムの動作に影響を与える可能性のある追加情報を提供します。 C では、コマンドライン引数を解析するためのメソッドがいくつかあります。

Boost::Program_Options と GNU Getopt

Boost::program_options と GNU getopt は、堅牢なコマンドラインを提供する 2 つの人気のあるライブラリです。引数解析機能。これらのライブラリを使用すると、必須およびオプションの引数を含むコマンド ライン オプションを定義および検証できます。これらは、ネストされたオプション、短いオプション名と長いオプション名、ヘルプ メニューなどの高度な機能を提供します。

std::Find の使用

より単純なコマンド ライン引数解析シナリオの場合は、std::findというアルゴリズムを採用することができる。このアプローチには、コマンドライン引数ベクトル内の特定のオプション文字列の検索が含まれます。

次の例は、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;
}

int main(int argc, char * argv[])
{
    char * filename = getCmdOption(argv, argv + argc, "-f");

    if (filename)
    {
        // Process filename
    }

    return 0;
}
ログイン後にコピー

コマンドライン引数解析用のカスタム クラス

コマンドライン引数解析機能をカプセル化するには、オプションの存在を確認し、オプション値を取得するためのメソッドを提供するカスタム クラス。このアプローチにより、コードの可読性と構成が強化されます。

次の例は、そのようなクラスを示しています。

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 &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 &option) const{
            return std::find(this->tokens.begin(), this->tokens.end(), option)
                   != this->tokens.end();
        }
    private:
        std::vector <std::string> tokens;
};

int main(int argc, char **argv){
    InputParser input(argc, argv);
    if(input.cmdOptionExists("-h")){
        // Process -h option
    }
    const std::string &amp;filename = input.getCmdOption("-f");
    if (!filename.empty()){
        // Process filename
    }
    return 0;
}
ログイン後にコピー

最終的に、C でコマンドライン引数を解析する最適な方法は、複雑さと要件によって異なります。アプリケーションの。高度な機能と構成可能性が必要な場合は、boost::program_options または GNU getopt が適切なオプションです。より単純なシナリオの場合、std::find アルゴリズムまたはカスタム クラスが便利なソリューションを提供します。

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

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