Salut,

j'ai lu un peu partout qu'il est impossible de faire un switch de string. Je voudrai poster une solution pour contourner le problème. Voici le code (compile sous g++ 3.3):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 
#include <iostream>
#include <string>
#include <map>
using namespace std;
 
int main(int argc, char *argv[]){
/*************************** 
* Petit parseur decommande
* G. Marcou
***************************/
    typedef map<string,int> StrInt;
    StrInt coms;
    string com;//Inutile, pour montrer que c'est bien une variable string
 
// Definition de la map
    coms["-to"]=0;
    coms["-ti"]=1;
 
//Boucle sur les options
    while ((argc > 1) && (argv[1][0] == '-')) {
// Trouver l'entree de la map qui correspond au string
        com=argv[1];//On peut utiliser argv directement
	map<string,int>::const_iterator i = coms.find( com );
// Blinder le programme
	if(i == coms.end()){
	    test(argv,argc);
	    cout << "Unknown parameter" << endl;
	    return(1);
	};
// Le fameux switch... 
	switch (i->second){
            case 0://-to
		--argc;
		++argv;
		cout << "toto" <<endl;
		break;
            case 1://-ti
		--argc;
		++argv;
		cout << "titi" << endl;
		break;
	};
    };
    return(0);
}
C'est une solution que je n'ai pas rencontrée auparavant. J'aimerai savoir si elle pose en soi un problème qui fait qu'on lui préfère des if imbriqués (solution le plus souvent proposée, je crois).

Ciao!