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

Algorithmes et structures de données Discussion :

decomposition chaine texte


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Par défaut decomposition chaine texte
    Bonjour,

    Voilà je cherche un algo qui avec une chaine de caractere du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    " Fract(A, B) + Bar(A) + Fract(ABar(B), Bar(A)) "
    me donne des objets (car j'utilise un language objet) :

    ce qui me donnerai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    F1 = new Fract(A, B)
    T1 = new Texte (" + ")
    B1 = new Bar(A)
    T2 = new Texte(" + ")
     
    t2 = new Texte(A)
    b2 = new Bar(B)
    b3 = new Bar(A)
    F2 = new Fract(t2+b2, b3)
     
    liste = [F1, T1, B1, T2, F2]
    les "mots clefs" étant : Fract, Bar
    le reste est considéré comme du texte

    En fait je ne sais meme pas si c'est possible... mais si vous avez des idées ?

    merci de votre aide

  2. #2
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Par défaut
    en faite il faudrait que j'arrive a a voir :

    [[ 'Fract', 'A', 'B'], ' + ', ['Bar', 'A'], ' + ', ['Fract', ['A', ['Bar', 'B']], ['Bar', 'A']]


    ca simplifie peut etre....?

  3. #3
    Membre émérite Avatar de pop_up
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 877
    Par défaut
    tu peux commencer a faire un split avec le caractere '+' pour commencer.
    tu obtiendras alors
    liste=['Fract(A, B)' , 'Bar(A)' , 'Fract(ABar(B), Bar(A))']

    le probleme c'est que je vois pas encore comment tu veux faire la différence entre "ne rien faire si je vois Bar" et "séparer A et Bar quand je vois ABar".

    au pire, sois tu connai le nom de la fonction et c'est faisable, soit tu regardes en fonction des majuscules

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 192
    Par défaut
    [[ 'Fract', 'A', 'B'], ' + ', ['Bar', 'A'], ' + ', ['Fract', ['A', ['Bar', 'B']], ['Bar', 'A']]
    En fait, je trouverais ça plus logique de renvoyer
    ['+',['+',[ 'Fract', 'A', 'B'], ['Bar', 'A']], ['Fract', ['A', ['Bar', 'B']], ['Bar', 'A']]]
    comme ça tous les opérateurs sont en notation préfixée.
    Tu peux classer tes opérateurs/fonctions par priorité de traitement croissant : d'abord +, puis Fract, Bar et ABar ex aequo.
    Ensuite, tu vois la chose récursivement : tu sépares la chaîne selon l'opérateur de priorité la plus faible. Ca te donne un ensemble de chaînes sur lesquelles tu recommences.
    Exemple :
    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
     
    "Fract(A, B) + Bar(A) + Fract(ABar(B), Bar(A))"
    Séparation sur le premier '+' --> 2 chaînes : 
     1. "Fract(A,B)"
      Séparation sur '+' : on fait rien, on passe à l'opérateur suivant
      Séparation sur 'Frac' : on renvoie la liste ['Frac' | R], R étant composé de l'analyse des deux chaines en paramètre :
        1.1 'A'
         Séparation  sur '+' : rien à faire
         ... plus d'opérateurs, on a un singleton --> on renvoie l'élément de liste 'A'
        1.2 'B'
         ... on renvoie l'élément de liste 'B'
      1 renvoie : ['Frac','A','B']
     2."Bar(A) + Fract(ABar(B), Bar(A))"
       Séparation sur '+' :
       2.1 "Bar(A)" --> ['Bar','A']
       2.2 "Fract(ABar(B), Bar(A))"
         On renvoie ['Fract' |R] avec R composé de :
         2.2.1 "ABar(B)" --> ['ABar','B']
         2.2.2 "Bar(A)" --> ['Bar','A']
    Ce qui te donnes comme algo général :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Analyse(st) : renvoie une liste
      RechercherOpérateurDePrioritéLaPlusFaible(st,op,L)     // L : liste des arguments de op trouvée, longueur variable selon le nombre de paramètres de op
      Si op non trouvé, renvoyer st
      Sinon
        Renvoyer [op,Analyse(L[1]),Analyse(L[2]),...]
      Fin Si
    Fin Analyse
    Au passage, quelqu'un peut-il me rappeler comment on appelle le nombre d'arguments d'un opérateur ?

  5. #5
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Citation Envoyé par borisd
    Au passage, quelqu'un peut-il me rappeler comment on appelle le nombre d'arguments d'un opérateur ?
    Son arité.

    --
    Jedaï

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 192
    Par défaut
    Merci !

Discussions similaires

  1. Recherche de chaine text
    Par xni70 dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/10/2007, 16h00
  2. Brouiller une chaine texte
    Par Clorish dans le forum Delphi
    Réponses: 11
    Dernier message: 19/08/2007, 12h46
  3. L'operateur OR fonctionne t'il sur les chaines textes?
    Par klowba dans le forum Général VBA
    Réponses: 8
    Dernier message: 26/04/2007, 15h49
  4. Recherche de chaine texte à partir d'un formulaire
    Par francky55 dans le forum IHM
    Réponses: 3
    Dernier message: 22/02/2007, 08h30
  5. [IO]Récupérer une chaine texte dans un flux HTTP
    Par elitost dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 16/03/2005, 10h39

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