首頁 >後端開發 >C++ >如何有效解析 C 中的命令列參數?

如何有效解析 C 中的命令列參數?

Patricia Arquette
Patricia Arquette原創
2024-11-27 07:31:09545瀏覽

How to Efficiently Parse Command Line Arguments in C  ?

解析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 &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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn