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
Libérer: 2024-11-27 07:31:09
original
602 Les gens l'ont consulté

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]]
Copier après la connexion

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;
}
Copier après la connexion

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;
};
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal