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 :

Changer un caractère dans une chaîne contenue dans une phrase


Sujet :

Algorithmes et structures de données

  1. #1
    Membre actif
    Inscrit en
    Décembre 2006
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 205
    Points : 240
    Points
    240
    Par défaut Changer un caractère dans une chaîne contenue dans une phrase
    Bonjour;
    je voudrais changer un caractère au sein d'une chaîne. ex:
    entrer une chaîne: rougea
    caractère à supprimer: a
    résultat après suppression: rouge
    Une idée?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 553
    Points : 566
    Points
    566
    Par défaut
    tu parcrours ta chaine caractère par caracter et si tu tombes sur a, tu supprime le caractère

  3. #3
    Membre actif
    Inscrit en
    Décembre 2006
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 205
    Points : 240
    Points
    240
    Par défaut
    donc pour i allant de 1 à fin de ligne()
    si tab[i] = 'a'
    ''=tab[i]
    fin si
    fin pour
    ?

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Attention, il faut décaler tous les caractères suivants de 1 vers la gauche ensuite, (si tu programmes en C ...)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 553
    Points : 566
    Points
    566
    Par défaut
    la plupart du temps ,les tableaux commencent à l'indice 0

    Si tab[i] = tonCaractereSupp alors
    tab[i] = vide
    Si pas la fin de la chaine alors
    decalerToutes LesCasesSuivantes vers la gauche
    FinSi

  6. #6
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Citation Envoyé par helios77
    la plupart du temps ,les tableaux commencent à l'indice 0

    Si tab[i] = tonCaractereSupp alors
    tab[i] = vide
    Si pas la fin de la chaine alors
    decalerToutes LesCasesSuivantes vers la gauche
    FinSi
    Non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Si tab[i] = tonCaractereSupp alors 
               tant que pas la fin de la chaine faire
                       decaler LaCaseSuivante vers la gauche
                       avancer d'une case vers la droite
               fin tant que
    fin si

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 553
    Points : 566
    Points
    566
    Par défaut
    pardon
    En fait j'incluais dans mon decalerTouteLesCases, la boucle qui parcourait le rsete du tableau
    C'est pour cette raison que j'ai fait ainsi

  8. #8
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Oui, je m'en doutais bien, mais le P.O. étant débutant, il était préférable d'être clair à ce sujet (j'espère l'avoir été).

  9. #9
    Membre habitué Avatar de Ksempac
    Inscrit en
    Février 2007
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 165
    Points : 185
    Points
    185
    Par défaut
    Cela me semble pas tres efficace comme algorithme.

    Imagine que ta chaine soit : "alexandre"
    Tu parcours la chaine :
    Premiere lettre = a, tu supprimes la lettre, puis tu parcours toute la chaine pour la decaler.

    Ensuite la premiere (=ex-seconde) lettre n'est pas a, on continue,
    Pareil sur la 2 et 3.

    4eme lettre = a, tu supprimes la lettre, puis tu parcours a nouveau tout le restant de la chaine pour decaler.

    Ensuite tu parcours la fin de la chaine qui ne pose aucun soucis.

    Au final tu as lu alexandre + lexandre + ndre.

    Je propose une autre solution qui ne parcourt qu'une fois toute la chaine.

    decalage = 0
    POUR i de 0 a fin de chaine
    {
    SI tab[i] = a
    ALORS decalage = decalage + 1
    SINON tab[i-decalage] = tab[i]
    }

  10. #10
    Membre expérimenté
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Points : 1 341
    Points
    1 341
    Par défaut
    Pour un problème comme ca, naturellement ce que je ferai c'est reconstruire une chaine. Ca n'est pas forcement le plus optimal (surtout en terme de mémoire ) mais c'est facile à comprendre ;-)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    chaine = "abcade";
    nouvelleChaine = "";
    i = 0;
    while (chaine[i] != finDeChaine) {
      if (chaine[i] != 'a')
        nouvelleChaine = nouvelleChaine . chaine[i]; // Concaténation
      i++;
    }
    echo "Ma nouvelle chaine est : " . nouvelleChaine;

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/01/2013, 11h38
  2. Réponses: 1
    Dernier message: 07/04/2011, 20h28
  3. Réponses: 3
    Dernier message: 07/04/2011, 14h38
  4. Réponses: 3
    Dernier message: 06/12/2010, 15h59
  5. Réponses: 0
    Dernier message: 07/06/2009, 12h31

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