4 votes

Chaînes de ligne de commande C++ comme Java ?

Existe-t-il un moyen d'obtenir des chaînes c++ à partir de la ligne de commande comme en Java ?

public static void main(String[] args)

où args est un tableau de chaînes de caractères C++ ?

11voto

Duck Points 17054

Pas précisément, mais vous pouvez vous en approcher facilement.

#include <iostream>
#include <vector>
#include <string>

using namespace std;

typedef vector<string> CommandLineStringArgs;

int main(int argc, char *argv[])
{
    CommandLineStringArgs cmdlineStringArgs(&argv[0], &argv[0 + argc]);

    for (int i = 0; i < cmdlineStringArgs.size(); ++i)
    {
        cout << cmdlineStringArgs[i] << endl;
    }

    return 0;
}

Ceci utilise simplement le constructeur surchargé de std::vector qui prend une paire d'itérateurs début/fin pour copier les arguments de la ligne de commande dans les vecteurs. C'est à peu près la même chose qu'en Java à partir de là.

Vous pouvez également construire un objet autour de ce vecteur avec des méthodes utilitaires pour convertir les arguments, mais cela ne sert pratiquement à rien. Il y a aussi beaucoup de paquets avec des objets qui traitent de l'interprétation des commutateurs de ligne de commande et autres. ACE, POCO, QT, etc. sont tous fournis avec de telles facilités.

11voto

AK. Points 550

Vous pouvez utiliser un vecteur pour transformer le tableau de caractères en chaînes de caractères.

#include <vector>
#include <string>
using namespace std;

int main (int argc, char** argv)
{
    vector <string> args (argv, argv + argc);
}

3voto

Pepe Points 3506

Oui, la fonction principale peut prendre 2 arguments

int main(int argc, char* argv[])

argc est le nombre d'arguments et argv contient une liste des arguments.

Par exemple, si vous exécutez votre programme en tant que :

MyProgram.exe hello

Puis

argc = 2
argv[0] = MyProgram.exe
argv[1] = "hello"

1voto

Il n'est pas intégré au langage, mais il est très facile à mettre en œuvre :

#include <vector>
#include <string>
using namespace std;

int main( int argc, char *argv[] ) {
    vector <string> args;
    for ( int i = 0; i < argc; i++ ) {
        args.push_back( argv[i] );
    }
    // do something with args
}

0voto

Zach Rattner Points 5849

En C, la signature de votre fonction principale ressemble à ceci :

int main(int argc, char** argv) .

argc contient le nombre d'arguments transmis par la ligne de commande. Le nom de l'exécutable est en position 0, et ajoute un à argc .

argv contient un tableau de chaînes de caractères contenant les arguments. Encore une fois, la position 0 est le nom de l'exécutable.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X