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 && ++itr != end) { return *itr; } return 0; }
カプセル化されたコード:
コードの可読性と保守性を向上させるには、解析ロジックを専用のファイルにカプセル化できます。 class.
class InputParser{ public: InputParser (int &argc, char **argv){ for (int i=1; i < argc; ++i) this->tokens.push_back(std::string(argv[i])); } const std::string& 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() && ++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; };
結論:
これらのメソッドは、単純なシナリオとより複雑なシナリオの両方に対応して、 C でコマンド ライン引数を解析する効率的な方法を提供します。コードの単純さ、柔軟性、パフォーマンスに関する特定の要件に最も適したアプローチを選択してください。
以上がC でコマンドライン引数を効率的に解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。