Bonjour, j'ai une chaine de caractère :
et j'aimerais supprimer le mot surplu de la chaine ainsi que l'anti-slash :Salut\comment\sava\surplu
mais je ne vois pas quel fonctions utiliser.Salut\comment\sava
Merci pour votre aide.
Bonjour, j'ai une chaine de caractère :
et j'aimerais supprimer le mot surplu de la chaine ainsi que l'anti-slash :Salut\comment\sava\surplu
mais je ne vois pas quel fonctions utiliser.Salut\comment\sava
Merci pour votre aide.
C'est assez simple: strstr() pour reperer la sous-chaine, et memmove() pour l'ecraser.
Bonjour,
Un extrait des pages sources C qui ne devrait plus tarder à arriver :Envoyé par benjiprog
Et tu fait :
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 #include <string.h> char *RemplacerFragment (char *source, char *vieux, char *nouveau) { char *original = source; char temp[256]; 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 original; }
Ici, tu ne remplace que la première occurance. Si tu veux remplacer toutes les occurences, j'ai un autre code mais plus long
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 char s[] = "Salut\comment\sava\surplu" RemplacerFragment (s, "sava\", "")
Là, tu supprimmes la fin... Ce n'est pas la demande originale...Envoyé par Mayti4
http://www.developpez.net/forums/sho...26&postcount=1
Respecter le cahier des charges fait partie du métier de programmeur.
Ta fonction est horriblement compliquee:
Un petit test:
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 int str_rem(char *s, char const *srem) { int n = 0; char *p; if (s && srem) { size_t const len = strlen(srem); while((p = strstr(s, srem)) != NULL) { memmove(p, p + len, strlen(p + len) + 1); n++; } } return n; }
donne bien:
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 #include <stdio.h> #include "str_rem.h" int main(void) { char s1[] = "This strong is a strong string.strong"; int n = str_rem(s1, "strong"); if(n != 3) { fprintf(stderr, "Error: only %d occurences found - expecting 3.\n", n); } puts(s1); return 0; }
On peut eventuellement nettoyer les espaces en trop, dans mon exemple.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 This is a string.
Je supprime '\surplu', donc bien ce qu'il veut.
Ou est le problème ?
Envoyé par Mayti4
J'avais conclus à un code plus général, surtout en lisant la réponse de Dazumba...
Vu qu'il y a deux chances sur trois pour que la prochaine question du PO soit 'et pour enlever sava?', autant y aller franco, non?Envoyé par Emmanuel Delahaye
Partager