à partir des sources même de ce site (§8 http://c.developpez.com/sources/c/?page=sommaire), des fonctions de manipulation de chaînes de caractères :
le code source original de remplacement d'une sous-chaîne (vieux) par une autre (nouveau) dans une chaîne de caractères (source) :
une digression du code précédent de remplacement d'une sous-chaîne (vieux) dans une chaîne (source) par une nouvelle sous-chaîne (nouveau) si cette sous-chaîne est encadrée par une chaîne de séparation (separateur)
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 int RemplacerFragment (char *source, const char *vieux, const char *nouveau) { char *original = source; char temp[4096]; int ancienne_long = strlen (vieux); int i, j, k, place = -1; for (i = 0; source[i] && (place == -1); ++i) for (j = i, k = 0; source[j] == vieux[k]; j++, k++) if (!vieux[k+1]) place = i; if (place != -1) { for (j=0; j<place; j++) temp[j] = source[j]; for (i=0; nouveau[i]; i++, j++) temp[j] = nouveau[i]; for (k = place + ancienne_long; source[k]; k++, j++) temp[j] = source[k]; temp[j] = 0; for (i=0; source[i] = temp[i]; i++) ; } return place; }
une fonction qui permet d'ôter la fin de chaîne d'une chaîne (source) à partir de la position d'une sous-chaîne (vieux)
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 int RemplacerFragment (char *source, const char *vieux, const char *nouveau, const char *separateur) { char *original = source; char temp[4096]; int ancienne_long = strlen (vieux); int i, j, k, place = -1; for (i = 0; source[i] && (place == -1); ++i) for (j = i, k = 0; source[j] == vieux[k]; j++, k++) if (!vieux[k+1] && (i==0 || source[i-1]==*separateur) && (source[j+1]== *separateur || source[j+1]=='\n')) place = i; if (place != -1) { for (j=0; j<place; j++) temp[j] = source[j]; for (i=0; nouveau[i]; i++, j++) temp[j] = nouveau[i]; for (k = place + ancienne_long; source[k]; k++, j++) temp[j] = source[k]; temp[j] = 0; for (i=0; source[i] = temp[i]; i++) ; } return place; }
Une fonction qui permet de remplacer une sous-chaîne non précisée par une nouvelle (nouveau) si elle est encadrée par deux sous-chaînes (vieux1 et vieux 2)
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 int RetirerCommentaire (char *source, const char *vieux) { char *original = source; char temp[4096]; int ancienne_long = strlen (vieux); int i, j, k, place = -1; for (i = 0; source[i] && (place == -1); ++i) for (j = i, k = 0; source[j] == vieux[k]; j++, k++) if (!vieux[k+1]) place = i; if (place != -1) { for (j=0; j<place; j++) temp[j] = source[j]; temp[j] = 0; for (i=0; source[i] = temp[i]; i++) ; } return place; }
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 int RetirerCommentaire (char *source, const char *vieux1, const char *nouveau, const char *vieux2) { char *original = source; char temp[4096]; int ancienne_long = strlen (vieux1); int i = 0, j = 0, k = 0, place1 = -1, place2 = -1; for (i = 0; source[i] && (place1 == -1); ++i) for (j = i, k = 0; source[j] == vieux1[k]; j++, k++) if (!vieux1[k+1] ) place1 = i; for (i = j; source[i] && (place2 == -1); ++i) for (j = i, k = 0; source[j] == vieux2[k]; j++, k++) if (!vieux2[k+1] ) place2 = j; if (place1 != -1 && place2 != -1) { for (j=0; j<place1; j++) temp[j] = source[j]; for (i=0; nouveau[i]; i++, j++) temp[j] = nouveau[i]; for (k = ++place2 ; source[k]; k++, j++) temp[j] = source[k]; temp[j] = 0; for (i=0; source[i] = temp[i]; i++) ; } return place1 != -1 && place2 != -1 ; }
Partager