プログラムを実行するとき、多くの場合、コマンドライン引数を指定する必要があります。これらの引数は、プログラムの動作に影響を与える可能性のある追加情報を提供します。 C では、コマンドライン引数を解析するためのメソッドがいくつかあります。
Boost::program_options と GNU getopt は、堅牢なコマンドラインを提供する 2 つの人気のあるライブラリです。引数解析機能。これらのライブラリを使用すると、必須およびオプションの引数を含むコマンド ライン オプションを定義および検証できます。これらは、ネストされたオプション、短いオプション名と長いオプション名、ヘルプ メニューなどの高度な機能を提供します。
より単純なコマンド ライン引数解析シナリオの場合は、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 && ++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 &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; }; int main(int argc, char **argv){ InputParser input(argc, argv); if(input.cmdOptionExists("-h")){ // Process -h option } const std::string &filename = input.getCmdOption("-f"); if (!filename.empty()){ // Process filename } return 0; }
最終的に、C でコマンドライン引数を解析する最適な方法は、複雑さと要件によって異なります。アプリケーションの。高度な機能と構成可能性が必要な場合は、boost::program_options または GNU getopt が適切なオプションです。より単純なシナリオの場合、std::find アルゴリズムまたはカスタム クラスが便利なソリューションを提供します。
以上がC でコマンドライン引数を効率的に解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。