解析C 語言中的命令列參數
在程式設計領域,解析命令列參數通常會帶來挑戰,尤其是在處理複雜輸入時模式。考慮一個接受以下格式參數的程式:
prog [-abc] [input [output]]
問題:
我們如何使用內建函數有效解析C 中的此類命令列參數函數或自訂程式碼?
Boost 和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中文網其他相關文章!