Switch de strings (c++)

Contenu du snippet

J'ai eu un jour une idée pour "switcher" les strings, ce qui est impossible en c ou c++. Faire des strcmp à tout bout de champ, ça ne m'intéressait pas pour créer un code bien espacé et compréhensible.

Pour me rapprocher des switchs, j'ai décider de faire une fonction à arguments illimités qui renvoie la position de l'argument qui répond au "switch". La fonction s_() effectue tous les strcmp un par un avant que la valeur renvoyée passe au switch.

Voilà ce que ça donne concrètement :

Source / Exemple :


/********************

  • Switch de string *
  • par ordiman85 *
                                        • /
#include <conio.h> #include <stdio.h> #include <string.h> // char* str est la string à "switcher" // IMPORTANT !! Mettre 0 comme dernier argument ! #ifdef __cplusplus // Fonction pour C++ unsigned int s_(char* str, ...) { unsigned int i = 0; while (*(++i+&str) != 0) if (strcmp(str, (char*)*(&str+i)) == 0) return i; return 0; } #else // Fonction pour le langage C unsigned int s_(char* str, char* cmp[]) { unsigned int i = 0; while (cmp[i] != 0) { if (strcmp(str, cmp[i]) == 0) return i+1; i++; } return 0; } #endif // Fonction principale int main() { printf("Test du switch de strings :\r\n"); // La string à tester est "switch", sa position est 4 char* String = "switch"; // On récupère un entier qui correspond à la position de la string identifiée // Méthode 1 (C++) #ifdef __cplusplus unsigned int id = s_(String, "Hello", "world", "!", "switch", "strings", 0); #else // Méthode 2 (C) char* comp[] = {"Hello", "world", "!", "switch", "strings", 0}; unsigned int id = s_(String, comp); #endif // Le switch switch (id) { case 1: // "Hello" printf("%d. Hello", id); break; case 2: // "world" printf("%d. world", id); break; case 3: // "!" printf("%d. !", id); break; case 4: // "switch" printf("%d. switch", id); break; case 5: // "strings" printf("%d. strings", id); break; default: // Pas identifié, id = 0 printf("Pas dans la liste (%d)", id); break; } // Pause et fin getch(); return 0; }

Conclusion :


J'ai réussi à adapter la fonction en C mais elle ne supporte pas les arguments illimités (il faut un tableau comme 2ème argument)

IMPORTANT : mettez 0 comme dernier argument !

@+

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.