Salut,
Si tu as un nombre fini de chaines de caractères intervenant dans ParanName (ce qui semble être le cas), mais que tu en accepte un nombre plus ou moins infini, tu peux envisager de tester tous les parametres l'un à la suite de l'autre et de leur donner une valeur en fonction de la chaine de caractères rencontrées.
Cela pourrait se faire sous la forme de
Code:
1 2 3 4 5 6 7 8 9 10
| std::string const paramNamesString[]={"toto","tata","titi","var","brol","truc"
/*... */};
int maxNameStrings = /* le nombre de chaines de caractères envisagées
int indexOfString(std::string const & s)
{
int ret=0;
while(ret<maxNameStrings && s.find(paramNamesString[ret])==std::string::npos)
++ret;
return ret;
}; |
Tu pourrais placer l'indice ainsi obtenu dans un tableau d'entiers, qui irait très bien pour la cause:
Code:
1 2 3 4 5 6 7 8 9 10 11
| int main(int argc, char *argv[])
{
std::vector<int> tab;
if(argc>1) // si l'on a introduit des arguments
{
// on les passe tous en revue
for(int i=1;i<argc;++i)
tab.push_back(indexOfString(argv[i]);
}
} |
Il n'y a plus par la suite qu'à parcourrir ce vecteur et de décider quoi faire ;)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| template <typename iterator>
void useParams(iterator b, iterator e)
{
while(b!=e)
{
swich(*b)
{
case 0:
/* si c'était "toto" */
break
case 1:
/* si c'était "tata" */
break
case 2:
/* si c'était "titi" */
break
/*... */
default :
/* si ce n'était aucune des chaines envisagées */
}
++b;
}
} |
(NOTA: j'ai créé une fonction template pour ne pas être limité à l'utilisation d'un vecteur ;))
Et cette fonction, tu l'insère à ta guise dans une boucle "classique":
Code:
1 2
| for(int i=...)
useParams(tab.begin(), tab.end()); |
Et le tour est joué :D
Tu auras un "temps de latence" avant le lancement de la boucle principale (le for(int i = ...) parce qu'il faudra, quoi qu'il arrive, comparer l'ensemble des arguments passés à potentiellement la totalité des chaines de caractères envisagées, mais cela accélérera fortement ta boucle principale (toujours le for (int i=...) ) parce que tu te contentera de comparer des entiers entre eux, ce qui est particulièrement rapide ;)
N'oublie pas que l'on passe 90% du temps dans 10% du code... ici, la comparaison des paramètres se trouve tout à fait en dehors des 10% "critiques" :D
EDIT: si tu dois compter le nombre de fois que titi, tata ou brol est utilisé, il est très facile de rajouter un compteur dans l'histoire :D