Les Allergies
Alimentaires
Posez votre question Signaler

Supprimer un caractere dans une chaine [Résolu]

Pof - Dernière réponse le 22 juil. 2010 à 10:37
Bonjour,
je programme en C++ et sans l'aide de fonction particuliere!
j'ai une chaine de caractere et je demande recherche un caractere a supprimer. l'acquisition de la chaine est OK, la recherche du caractere est OK, mais je ne sais pas comment supprimer ce caractere!
ex : chaine1 = 'bonjour';
recherche de 'j';
suppression de 'j';
chaine1 = 'bonour';

si vous pouvez m'aider, MERCI!!!!!!
Pof
Lire la suite 

Supprimer un caractere dans une chaine »

10 réponses
Réponse
+5
moins plus
Imagine que tu as une tête de lecture qui avance sur ta chaine, et une tête d'écriture qui écrit ce que tu lis sauf les 'e'.
Bref, t'as besoin d'une seule chaine et d'un seul parcours. C'est optimal.

void del_char(char* str, char c) //Enleve tous les c de str
{
   int id_read, id_write;
   id_read = 0;
   id_write = 0;

   while (str[id_read] != '\0')
   {
      if (str[id_read] != c)
      {
          str[id_write] = str[id_read];
          id_write++;
      }
      id_read++;
    }
    str[id_write] = '\0';
}
Ajouter un commentaire
Réponse
+1
moins plus
Si tu doit supprimer un caractere dans la chaine directement (sans renvoyer une nouvelle chaine), il suffit de décaler tout les caractères, qui sont à droite de celui à supprimer, d'un caractère sur la gauche:

chaine de départ :
chaine1 => 'b'o'n'j'o'u'r'

suppression de j :
chaine1 => 'b'o'n' 'o'u'r'

décalage des caractères :
chaine1 => 'b'o'n'o'u'r' '


je pense qu'en C sa devrait donner un truc du genre :

pos <= position du caractère a supprimer. Dans bonjour, pos=3
i=pos;
while(chaine1[i]!='\0'){
  chaine1[i]=chaine1[i+1];
  i++;
}
Ajouter un commentaire
Réponse
+1
moins plus
ca, c'est une fonction qui marche!

void supprime(char *texte, char x)   // supprime x dans la chaine
{
int p ,i;
for(i=0;texte[i] != '\0';i++)
  {if (texte[i] == x)  // on a trouve
       {
        for(p=i;texte[p]!=0;p++)
        texte[p]=texte[p+1];
       }
   }
}  

amuse toi bien...!
Pof
Ajouter un commentaire
Réponse
+1
moins plus
ma réponse est tardive mais vous savez qu'il existe une fonction en vb pour ca ?

ca donne :

sub EnleverLeJ()
dim ch as string
ch ="Bonjour"
ch = Replace(ch, "j", "")
'en gros cherche j et met un caractère vide à la place
end sub


et si le caractère est présent plus d'une fois mais que tu ne veux enlever qu'une fois tu met :
ch = Replace(ch,"j","",count:=1)

voila ;-)
Ajouter un commentaire
Réponse
+0
moins plus
salut =)

tu veux pas utiliser la STL, ou autre bibliothèque où tout est déjà fait ?

sinon, je ferais un truc comme ça (algo, tu mettras en c):
tant que caractères
       si chaine[index] != caractere_a_enlever
                buffer[index2] = chaine[index]
                index2 ++
       fin si
       index ++
fin

Pof - 21 nov. 2005 à 12:03
bah en fait cet un exo de prog que j'ai a faire et la consigne est de tout faire sans aucune librairie particuliere.
j avais pensé à un truc comme :
if (chaine1modifiee[i] == caractere_a_supp)
{ chaine1modifiee[i] = chaine1[i+1]; }

avec chaine1 = 'bonjour';
si je veux supp le 'j'
chaine1modifiee[4] = chaine[5]
mais comment faire pour le reste de la chaine?
Ajouter un commentaire
Réponse
+0
moins plus
ben comme j'ai mis plus haut : tu boucles tant qu'il y a des caractères à lire. Si le caractère lu est celui a supprimer, tu ne fais rien, sinon tu le mets dans ta nouvelle chaine.

il te faut donc 2 index et 2 chaines de caractères.
Ajouter un commentaire
Réponse
+0
moins plus
dsl j'ai ce même prob et j'ai pas trouver de solution
car c'est correct i+1 et i mais ça marche pas par exemple si nous avons une chaine eeeee et on veut supprimer le 'e' alors qui me donne le solution
Ajouter un commentaire
Réponse
-1
moins plus
La solution la plus bourine, c'est de relancer la fonction tant que le caractères "e" est trouvé.
Il y a surement un moyen de faire en sorte que cela soit plus optimisé, mais ca reste la solution de base.
Ajouter un commentaire
Réponse
-1
moins plus
Par un copié collé je me suis créé un fichier excel contenant malheureusement des caractères spéciaux que je voudrais maintenanat virer.
Comment faire pour remplacer des "□" par rien ou par un espace ??
je prends la fonction remplacer et je rentre ce "□" par un CTRL-V mais cela ne marche pas .
D'avance merci
Ajouter un commentaire
Ce document intitulé « Supprimer un caractere dans une chaine » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?