salut,
je cherche si il y a une fonction en C qui supprime un caractere d'une chaine donnee( comme RemoveString en java).
merci
salut,
je cherche si il y a une fonction en C qui supprime un caractere d'une chaine donnee( comme RemoveString en java).
merci
Rien de tel en C, tu peux retrouver le caractère à supprimer avec la fonction strchr, le reste bin tout dépend, tu peut par exemple décaler les caracteres suivant de -1 à chaque fois par exemple, enfin y'a plusieures méthodes pour faire ca
Mon Site
Ma bibliothèque de gestion des chaînes de caractères en C
L'imagination est plus importante que le savoir. A. Einstein
Je ne répond à aucune question technique par MP, merci d'avance !
Bonjour,
effectivement, le mieux est sans doute de retrouver ton caractère, puis de décaler tous les caractères suivant d'un cran à gauche.
Consignes aux jeunes padawans : une image vaut 1000 mots !
- Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
- Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
- ton poste tu dois marquer quand la bonne réponse tu as obtenu.
Une utilisation correcte de memmove() permet ça. Attention, la chaine doit être modifiable. (gcc : compiler avec -Wwritable-string évite de faire des bêtises...)Envoyé par m@rki
Pas de Wi-Fi à la maison : CPL
Un petit code sans memmove() pour le décalage.
Ce qui est bien quand il s'agit de supprimer, c'est que bien fait, ça peut se faire aussi bien "sur place" que d'une chaîne à l'autre...
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
23
24
25
26
27
28
29
30
31
32
33 #include <stddef.h> size_t str_remove_chars( char *dest, //[out] Destination buffer. MUST be at least as long as src. char const *src, //[in] Source string. Can be equal to dest. char const *chars //[in] Chars to remove. ) { size_t iSrc,iDest; char c; for(iSrc=0,iDest=0 ; (c=src[iSrc]) != '\0' ; iSrc++) { if(strchr(chars, c)==NULL) dest[iDest++] = c; } dest[iDest] = '\0'; return iDest; } #ifdef TESTING #include <stdio.h> void TestStrings(void) { char str1[] = "Frédéric"; char dest[sizeof(str1)/sizeof(str1[0])]; size_t res1 = str_remove_chars(dest, str1, "r"); size_t res2 = str_remove_chars(str1, str1, "é"); printf("dest = \"%s\" (%u chars).\n", dest, (unsigned int)res1); printf("str1 = \"%s\" (%u chars).\n", str1, (unsigned int)res2); } #endif
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Moi j'allais proposer ce code (désolé j'étais oocupé ailleurs ) :
Tu vois ED, cette fois j'ai pensé aux pointeurs
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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 #include <stdlib.h> #include <stdio.h> #include <string.h> int main (void) { char str [30] = { "Supprimer le #diese" }; char * pr = NULL; /* Pointeur de lecture. */ char * pw = NULL; /* Pointeur d'ecriture. */ printf ("%s\n", str); /* La chaine avant modifications. */ pr = strchr (str, '#'); /* Recherche du caractère a supprimer. */ if (pr != NULL) { /* * On place le pointeur d'ecriture a la meme adresse que * le pointeur de lecture pour commencer le decalage. */ pw = pr; while (*pr != 0) { pr++; /* On decale le pointeur de lecture d'une case. */ *pw = *pr; /* Ecriture du caractere courant a sa nouvelle adresse. */ pw++; /* On decale le pointeur d'ecriture d'une case. */ } } printf ("%s\n", str); /* La chaine apres modifications. */ return EXIT_SUCCESS; }
Mon Site
Ma bibliothèque de gestion des chaînes de caractères en C
L'imagination est plus importante que le savoir. A. Einstein
Je ne répond à aucune question technique par MP, merci d'avance !
C'est vrai, j'aurais pu utiliser directement les pointeurs au lieu de mettre des index.
Mais ma fonction à moi retourne la nouvelle longueur de chaîne, na!
PS: J'ai bien dit longueur et non pas taille de la chaîne.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
merci pour toutes vos reponses,
moi je lis les caractere d'un fichier et il faut que je supprime quelque caractere particulier,mon probleme mnt c'est que je sais pas comment modifier le texte du meme fichier,cad je supprime mon caractere et je decale la suite car mon fichier et en ecriture je peux pas l'ouvrir en lecture et en ecriture.
ce que je fais pour le moment c que j'ecris mon flux de caracetre qui reste dans un nouveau fichier ouvert en ecriture.
donc,y a pas une solution pour lire et ecrire a partir et dans le meme fichier?
Il fallait le dire plus tôt que tu voulais faire ça dans un fichier...Envoyé par m@rki
Le principe est bien connu. Le fichier original A en lecture ("r"), un fichier de copie B en écriture ("w"). On copie les octets de A vers B avec une boucle fgetc() / fputc(), en repérant (comptant, comparant...) les caractères à ne pas copier. Quand c'est le cas, tout simplement, on omet de faire la copie et voila. Le caractère est supprimé. Quand c'est fini, on ferme les fichiers.je cherche si il y a une fonction en C qui supprime un caractere d'une chaine donnee
Pas de Wi-Fi à la maison : CPL
Ou alors, si on ne veux pas créer un deuxième fichier, on l'ouvre en lecture seul pour charger le contenu dans un buffer, puis on le ferme. On réalise les modifications voulues en utilisant la fonction proposée par Médinoc ou Franck.H, puis on sauve dans le fichier ouvert en écriture.Envoyé par Emmanuel Delahaye
Thierry
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
C'est beaucoup plus complexe, pas toujours possible (taille mémoire) et ne permet pas l'annulation...Envoyé par mujigka
Pas de Wi-Fi à la maison : CPL
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