Maison >développement back-end >C++ >Comment analyser efficacement les arguments de ligne de commande en C ?

Comment analyser efficacement les arguments de ligne de commande en C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-27 07:31:09546parcourir

How to Efficiently Parse Command Line Arguments in C  ?

Analyse des arguments de ligne de commande en C

Dans le monde de la programmation, l'analyse des arguments de ligne de commande pose souvent des défis, en particulier lorsqu'il s'agit d'entrées complexes motifs. Considérons un programme qui accepte les arguments au format suivant :

prog [-abc] [input [output]]

La question :

Comment pouvons-nous analyser efficacement de tels arguments de ligne de commande en C à l'aide de la fonction intégrée fonctions ou code personnalisé ?

Boost et GNU :

Les suggestions fournies pour utiliser boost::program_options et GNU getopt sont des options fiables. Ces bibliothèques offrent des fonctionnalités robustes pour gérer un large éventail de scénarios d'arguments de ligne de commande.

Approche de la bibliothèque standard :

Cependant, pour des situations plus simples, la fonction std::find offre un moyen simple d'analyser les arguments. Cette approche vous permet de rechercher des indicateurs spécifiques ou de récupérer le nom de fichier après un argument -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;
}

Code encapsulé :

Pour améliorer la lisibilité et la maintenabilité du code, vous pouvez encapsuler la logique d'analyse dans un fichier dédié 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;
};

Conclusion :

Ces méthodes fournissent des moyens efficaces d'analyser les arguments de ligne de commande en C, adaptés à des scénarios simples et plus complexes. Choisissez l'approche qui correspond le mieux à vos exigences spécifiques en matière de simplicité, de flexibilité et de performances du code.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn