Rechercher : dans
Par :

Supprimer un caractere dans une chaine

Dernière réponse le 9 jan 2008 à 09:26:45 Pof, le 21 nov 2005 à 10:43:47 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « Supprimer un caractere dans une chaine » dans :
Sed - Trucs et astuces VoirSubstitution Affichage Suppression Espace et tabulation Ligne vide Intervalle régulier Divers Joindre des lignes Affichage insensible à la casse Substitution Substituer "foo" par "bar" à chaque ligne Seulement la 1ère...
Supprimer un fichier contenant des caractères spéciaux VoirSi le fichier que vous souhaitez supprimer commence par un caractère "moins" (-), la commande rm risque de prendre la suite comme une option de la ligne de commande. Pour y remédier, une première solution consiste à faire précéder le nom du...
Javascript - Concaténation de chaînes de caractères VoirLe terme "concaténer" signifie joindre deux chaînes bout à bout pour n'en former qu'une seule. Dans la plupart des langages tels que PHP, la concaténation se fait avec le caractère ".". En javascript, il suffit d'utiliser le caractère plus (+) ou...
Javascript - Les chaînes de caractères VoirQu'est-ce qu'une chaîne de caractère Une chaîne de caractère est, comme son nom l'indique, une suite de caractères. On la représente par la suite de caractères encadrée par des guillemets simples (') ou doubles ("), sachant que les deux types de...
Les chaînes de caractères en C++ VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une...
Langage C - Les chaînes de caractères VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C, une chaîne...

1

Luffy =), le 21 nov 2005 à 11:53:15

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

Le Parisien, il vaut mieux l'avoir en journal !!! :-P

Répondre à Luffy =)

2

Pof, le 21 nov 2005 à 12:03:35

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?

Répondre à Pof

3

Luffy =), le 21 nov 2005 à 12:06:25

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. Le Parisien, il vaut mieux l'avoir en journal !!! :-P

Répondre à Luffy =)

4

GallyNet, le 21 nov 2005 à 13:48:20

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++;
}

Répondre à GallyNet

5

ahmed, le 6 fév 2007 à 12:44:20

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

Répondre à ahmed

6

Pof, le 6 fév 2007 à 13:47:24

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

Répondre à Pof

7

GallyNet, le 6 fév 2007 à 13:48:50

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.

Répondre à GallyNet

8

Micky, le 16 aoû 2007 à 14:47:50
  • +3

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';
}

Répondre à Micky

9

 laissepiC, le 9 jan 2008 à 09:26:45

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

Répondre à laissepiC
Collection CommentÇaMarche.net