Heim >Backend-Entwicklung >C++ >Wie kann man Befehlszeilenargumente in C effizient analysieren?

Wie kann man Befehlszeilenargumente in C effizient analysieren?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-27 07:31:09546Durchsuche

How to Efficiently Parse Command Line Arguments in C  ?

Befehlszeilenargumente in C analysieren

In der Welt der Programmierung stellt das Parsen von Befehlszeilenargumenten oft eine Herausforderung dar, insbesondere wenn es um komplexe Eingaben geht Muster. Stellen Sie sich ein Programm vor, das Argumente im folgenden Format akzeptiert:

prog [-abc] [input [output]]

Die Frage:

Wie können wir solche Befehlszeilenargumente in C mithilfe der integrierten Funktion effizient analysieren Funktionen oder benutzerdefinierter Code?

Boost und GNU:

Die bereitgestellten Vorschläge Die Verwendung von boost::program_options und GNU getopt sind zuverlässige Optionen. Diese Bibliotheken bieten robuste Funktionalität für die Handhabung einer Vielzahl von Befehlszeilenargument-Szenarien.

Standardbibliotheksansatz:

Für einfachere Situationen eignet sich jedoch die Funktion std::find bietet eine einfache Möglichkeit, Argumente zu analysieren. Mit diesem Ansatz können Sie nach bestimmten Flags suchen oder den Dateinamen nach einem -f-Argument abrufen.

#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;
}

Gekapselter Code:

Um die Lesbarkeit und Wartbarkeit des Codes zu verbessern, Sie können die Parsing-Logik in einem dedizierten Paket kapseln Klasse.

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;
};

Fazit:

Diese Methoden bieten effiziente Möglichkeiten zum Parsen von Befehlszeilenargumenten in C und eignen sich sowohl für einfache als auch für komplexere Szenarien. Wählen Sie den Ansatz, der Ihren spezifischen Anforderungen an Code-Einfachheit, Flexibilität und Leistung am besten entspricht.

Das obige ist der detaillierte Inhalt vonWie kann man Befehlszeilenargumente in C effizient analysieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn