Bonjour
Existe-t-il en C un équivalent de la fonction str_replace présent dans plusieurs langages?
Car il me semble qu'elle existe en C++ mais pas en C.
Merci d'avance
Bonjour
Existe-t-il en C un équivalent de la fonction str_replace présent dans plusieurs langages?
Car il me semble qu'elle existe en C++ mais pas en C.
Merci d'avance
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Pas en standard mais c'est un bon exercice d'en réaliser une. Tu as déjà à dispo la fonction strstr qui permet de trouver la première occurence d'une chaîne à l'intérieur d'une chaîne. Pour réaliser la fonction str_replace, tu dois remplacer toutes les occurences de la chaine a remplacer par la nouvelle chaine. Mais puisque toutes deux n'ont pas forcément la même longueur, tu dois ajuster la taille de la chaine à remplacer avant d'effectuer le remplacement. Pour t'aider à démarrer, voici une fonction qui remplace la première occurence d'une sous-chaine par une nouvelle. Pour faire la fonction str_replace, tu dois tout simplement ajouter une boucle et ça, je te laisse toi-même le faire.
Tu devras également ajouter des tests contre le débordement de tampon, autrement dit tu dois tout d'abord remplacer cette fonction par :
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 #include <string.h> char * str_replace_first(char * buffer, char * s, char * by) { char * p = strstr(buffer, s), * ret = NULL; if (p != NULL) { size_t len_p = strlen(p), len_s = strlen(s), len_by = strlen(by); if (len_s != len_by) { /* ajuster la taille de la partie 's' pur pouvoir placer by */ memmove(p + len_by, p + len_s, len_p); } /* rempacer s par by */ strncpy(p, by, len_by); ret = buffer; } return ret; }C'est très important.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 char * str_replace_first(char * buffer, size_t bufsize, char * s, char * by) { ... }
Et voici un exemple d'utilisation de str_replace_first :
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 #include <stdio.h> char * str_replace_first(char * buffer, char * s, char * by); int main() { char s[50] = "salut tt le monde !"; if (str_replace_first(s, "tt", "tout") != NULL) printf("remplacement effectue.\n"); printf("%s\n", s); return 0; }
Partager