Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menghuraikan Argumen Baris Perintah dengan Cekap dalam C?

Bagaimana untuk Menghuraikan Argumen Baris Perintah dengan Cekap dalam C?

Patricia Arquette
Patricia Arquetteasal
2024-11-27 07:31:09555semak imbas

How to Efficiently Parse Command Line Arguments in C  ?

Menghuraikan Argumen Baris Perintah dalam C

Dalam dunia pengaturcaraan, menghuraikan argumen baris arahan sering menimbulkan cabaran, terutamanya apabila berurusan dengan input yang kompleks corak. Pertimbangkan program yang menerima hujah dalam format berikut:

prog [-abc] [input [output]]

Soalannya:

Bagaimanakah kita boleh menghuraikan argumen baris arahan sedemikian dengan cekap dalam C menggunakan terbina dalam fungsi atau kod tersuai?

Tingkatkan dan GNU:

Cadangan yang diberikan untuk menggunakan boost::program_options dan GNU getopt ialah pilihan yang boleh dipercayai. Perpustakaan ini menawarkan fungsi yang mantap untuk mengendalikan pelbagai senario hujah baris arahan.

Pendekatan Perpustakaan Standard:

Walau bagaimanapun, untuk situasi yang lebih mudah, fungsi std::find menawarkan cara yang mudah untuk menghuraikan hujah. Pendekatan ini membolehkan anda mencari bendera tertentu atau mendapatkan semula nama fail berikutan argumen -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;
}

Kod Terkapsul:

Untuk meningkatkan kebolehbacaan dan kebolehselenggaraan kod, anda boleh merangkum logik penghuraian dalam khusus 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;
};

Kesimpulan:

Kaedah ini menyediakan cara yang cekap untuk menghuraikan hujah baris arahan dalam C , memenuhi kedua-dua senario yang mudah dan lebih kompleks. Pilih pendekatan yang paling sesuai dengan keperluan khusus anda untuk kesederhanaan, fleksibiliti dan prestasi kod.

Atas ialah kandungan terperinci Bagaimana untuk Menghuraikan Argumen Baris Perintah dengan Cekap dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn