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?
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?
tu parcrours ta chaine caractère par caracter et si tu tombes sur a, tu supprime le caractère
donc pour i allant de 1 à fin de ligne()
si tab[i] = 'a'
''=tab[i]
fin si
fin pour
?
Attention, il faut décaler tous les caractères suivants de 1 vers la gauche ensuite, (si tu programmes en C ...)
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
NonEnvoyé par helios77
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
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
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é).
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]
}
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;
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager