IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

convertir une chaine de caractère en expression booléenne


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 134
    Par défaut convertir une chaine de caractère en expression booléenne
    Bonjour,

    Je souhaiterais transformer une chaine de caractère en expression (condition) qui sera utilisée dans une boucle if. Pour être un peu plus clair, j'ai par exemple la chaîne "(!d) || (r)" et je voudrais en gros pouvoir faire sauter les "" et donc ne garder que le reste pour faire une boucle if( (!d) || (r) ), sachant que j'aurais bien mes variables d et r. Je cherche donc à convertir ma chaîne de caractère en expression booléenne !
    Est-ce que je délire un peu dans mon idée ou existe-t-il une astuce ?

  2. #2
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,

    En somme tu voudrais faire un interpréteur de commandes? Car une fois que ton programme est compilé, pas moyen de changer quoique ce soit dans le déroulement du programme. Il y a des solutions avec d'autres languages comme python qui a la fonction exec(chaine) où chaine est une ligne de commande qui peut venir de l'utilisateur. Mais dans le cas du C, à part un interpréteur, je ne vois pas de solution.

    A+

    Pfeuh

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 134
    Par défaut
    L'idée de l'interpréteur de commande se rapproche effectivement de ce que je souhaite faire. J'ai cependant oublié de vous présenter le contexte de ma demande, ce qui peut peut-être éclairer un peu plus. En fait, j'ai un automate (construit en mémoire de mes blanches mains ... ) et je souhaite à présent l'évaluer. J'ai donc des états et des transitions et pour chaque transition j'ai une chaîne de caractère qui correspond à la condition à respecter pour aller à l'état suivant. Je souhaite donc transformer cette chaîne de caractère en vraie expression booléennes dans ma fonction qui fait avancer dans l'automate.

  4. #4
    Membre chevronné

    Homme Profil pro
    Développeur mobile iOS / Android
    Inscrit en
    Décembre 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur mobile iOS / Android
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 259
    Par défaut
    Bonjour,
    une des idées est de couper le début et la fin de ta chaîne sachant que les "" que tu veux enlever se situe à la premiére position de ta chaine à l'indice 0 et à l'avant dernière position, car le dernier élément d'une chaine de caractère c'est le \0.

    tu déclares une 2éme variable ou tu stockera ta nouvelle chaine sans les guillemets. Utilises un if par exemple pour faire cela
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

    N'oubliez pas de consulter les FAQ Swift, Android
    Tutoriel : Développer une application multilingue sous iOS

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 134
    Par défaut
    Oui mais dans ce cas ma seconde variable sera toujours une chaine de caractère. J'ai du mal expliqué la situation, en fait j'ai pas de guillemets à proprement dit dans ma chaine mais vu que c'est une chaine de caractères, si je fais un if dessus c'est comme si je faisais if("machaine"). Et donc ça me donnera toujours 1 !
    En gros j'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char* label = "(!d) || (r)"
    Et je voudrais pouvoir faire :

    Mais il faut que label soit interprété comme une expression booléenne et pas comme une chaine de caractère.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 134
    Par défaut
    Un autre exemple un peu plus simple (normalement) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     char * exp = "b==0";
      int b= 1;
      if(exp)
        printf("exp\n");
    ca affiche bien "exp" mais moi j'aimerais qu'il interprète bien ce b==0 en expression booléenne et dans ce cas je ne devrais pas voir "exp" vu que b = 1

  7. #7
    Membre chevronné

    Homme Profil pro
    Développeur mobile iOS / Android
    Inscrit en
    Décembre 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur mobile iOS / Android
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 259
    Par défaut
    Si tu connais toutes les expressions que t'envoie ton programme, tu les testes toutes et tu dis ensuite s'ils doivent être VRAI ou FAUX. C'est aussi une solution que j'ai déjà utilisé et qui fonctionne trés bien.
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

    N'oubliez pas de consulter les FAQ Swift, Android
    Tutoriel : Développer une application multilingue sous iOS

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/10/2007, 13h51
  2. Réponses: 5
    Dernier message: 16/05/2007, 13h43
  3. Convertir une chaine de caractère en tableau
    Par Mysti¢ dans le forum Général Python
    Réponses: 7
    Dernier message: 09/04/2007, 12h20
  4. Réponses: 6
    Dernier message: 14/06/2006, 15h27
  5. [XSL] Convertir une chaine de caractère
    Par bahet dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 11/04/2006, 10h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo