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 :

algo supprimer espaces consecutifs


Sujet :

Algorithmes et structures de données

Vue hybride

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

    Informations forums :
    Inscription : Février 2008
    Messages : 130
    Par défaut algo supprimer espaces consecutifs
    Bonjour j'essaie de faire un programme qui supprime les espaces en trop dans une chaine de caractère j'ai donc fait l'algo suivant :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    pour i<-1 à longueur(chaine) faire
          si (chaine[i]=' ') et (chaine[i+1]=' ') alors
            chaine[i]<-chaine[i+1]
          fin si
    fin pour


    a partir de cela j'ai fait le programme en pascal pour delphi :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
          for i:=1 to length(chaine) do
             begin
             if ((chaine[i]=' ') and (chaine[i+1])) then
                 begin
                     chaine[i]:= chaine[i+1];
                 end;
             end;

    mais mon probleme est que ce code ne fonctionne pas et je ne sais pas pourquoi est ce que vous pourriez m'expliquer quelle erreur j'ai fait dans mon algo ?

  2. #2
    Inactif
    Inscrit en
    Février 2008
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 45
    Par défaut
    Citation Envoyé par amateurc Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    pour i<-1 à longueur(chaine) faire
          si (chaine[i]=' ') et (chaine[i+1]=' ') alors
            chaine[i]<-chaine[i+1]
          fin si
    fin pour
    Bonjour,

    Avec ce code, tu ne fais rien de particulier : primo, tu traites uniquement le cas où tu as un seul espace en trop, donc ça ne marchera pas pour deux, trois, etc. espaces ! Secundo, tu ne fais aucune suppression (décalage à gauche) puisque tu affectes l'espace en trop de la droite à celui de la gauche... Donc, tu dois réfléchir à nouveau à ton algorithme.
    __________________
    - Premièrement, il faudra réfléchir;
    - Deuxièment, chercher;
    - Finalement, poser son problème en le décrivant correctement.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Par défaut
    Citation Envoyé par amateurc;2969764
    [CODE
    for i:=1 to length(chaine) do
    begin
    if ((chaine[i]=' ') and (chaine[i+1])) then
    begin
    chaine[i]:= chaine[i+1];
    end;
    end;[/CODE]
    Regarde ce que j'ai mis en rouge tu as oublié un test.
    Et comme le dis paronyme tu ne fait que copier un espace dans un espace ca ne changera pas ta chaine.
    Tu pourrais par exemple recopier ta chaine dans une nouvelle chaine, en ne copiant qu'un seul espace maximum si tu en détecte plusieurs à la suite.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 114
    Par défaut
    Bonjour,

    D'après le message, tu as écrit ton programme en pascal pour Delphi.
    Il me semble (mais c'est très veiux dans ma mémoire ) que des fonctions tel Trim existe, qu'il est peut-être pas utile de t'enquiqiner à réécrire un tel algo .
    Sinon persévère si tu tiens à l'écrire toi-même.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 130
    Par défaut
    A partir de ce que vous m'avez dit j'ai refait un algorithme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    pour i<-1 à longueur(chaine) faire
           si (chaine[i]<>' ') alors
                  chaine2[j]<-chaine[i]
           fsi
           si (chaine[i]=' ') et (chaine[i+1]<>' ') alors
                  chaine2[j]<-' '
           fsi
           j=j+1
    fpour
    est ce que vous pouvez m'indiquer si il y a un problème avec celui ci

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Par défaut
    Ca a l'air bon.
    Par contre fait attention tu fait un debordement dans les indices :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    si (chaine[i]=' ') et (chaine[i+1]<>' ') alors
    Comme tu vas jusqu'a longueur(chaine) chaine[i+1] n'existe pas.

    Tu peux remplacer ce test par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    si (chaine[i]=' ') et (i <= longueur(chaine) ou (chaine[i+1]<>' ')) alors
    Normalement si i > longueur de chaine il ne testera pas chaine[i+1] (en C c'est vrai en tout cas, apres je sais pas).

    Sinon tu peux aller de 1 a longueur(chaine) - 1 et à la fin recopier chaine[longueur(chaine)].

  7. #7
    Candidat au Club
    Inscrit en
    Février 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 3
    Par défaut
    mon idée est basé juste sur pascal. voilà on va chercher tous les double espace dans la chaine
    on va boucler avec "tantque" pour chaque double éspace on va effacer un.
    c'est tout
    while pos(" ",ch)<>0 do
    delete(ch,pos(" ",ch),1);

    NB: pos est une fonction prédefini de pascal qui donne la position d'une chaine dans une autre
    delete est une procédure qui éfface d'une chaine un nombre de caractère apartir d'une position

    c'est testé, amuse toi bien

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    bah ton algo initial etait sur une bonne base, mais pas tout a fait...

    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
     
    vrai = 1
     
    Tant que vrai
        vrai = 0
     
        si longueur(chaine) > 1
            pour i = 1 à i = (longueur(chaine)-1) faire
                   si (chaine[i]=' ') et (chaine[i-1]=' ') alors
                         si i different de (longueur(chaine)-1)
                               pour j = i+1 a j = (longueur(chaine)-1)
                                    chaine[j]<-chaine[j+1]
                               fin pour
                         fin si
     
                         longueur(chaine) = longueur(chaine) - 1
                         vrai = 1
                         sortie pour
                    fin si
            fin pour
         fin si
    fin tant que

Discussions similaires

  1. [String] supprimer les doubles espaces consecutifs
    Par waldoun dans le forum Langage
    Réponses: 3
    Dernier message: 24/05/2008, 15h39
  2. Supprimer espace avant insertion dans état
    Par aCe_GiK dans le forum Access
    Réponses: 5
    Dernier message: 24/04/2006, 17h34
  3. [SQL / ORACLE] Supprimer espace dans une phrase
    Par shaun_the_sheep dans le forum Oracle
    Réponses: 10
    Dernier message: 31/01/2006, 16h29
  4. [CSS] Supprimer espace entre 2 div sous Internet explorer
    Par Torpedox dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 30/12/2005, 16h41
  5. Supprimer espace
    Par csauvage dans le forum Access
    Réponses: 2
    Dernier message: 22/06/2005, 11h53

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