Salut,
Dans les exemples et FAQ du C je trouve le code suivant pour supprimer tous les espaces d'une chaîne de caractères :
A vrai dire je demande si un code comme :
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 char* supprime (const char *src) { char *dest = NULL, *res; int n = strlen (src); int i, dansunmot, j = 0; dest = malloc (n+1); if(dest == NULL) { return NULL; } /* Cherche le premier non espace */ i = 0; while ((i < n) && (src[i] == ' ')) { i++; } /* On est dans un mot */ dansunmot = 1; /* Jusqu'a la fin de la chaine */ while (i < n) { /* Si c'est un espace, on fait remarquer qu'on n'est plus dans un mot */ if (src[i] == ' ') { dansunmot = 0; } else { /* Si on n'est pas dans un mot, on met un espace */ if (dansunmot == 0) { dest[j]=' '; j++; } /* On est dans un mot */ dansunmot = 1; /* On copie la lettre */ dest[j] = src[i]; /* On incremente l'indice de destination */ j++; } /* On incremente l'indice de la source */ i++; } /* Mettre le '\0' a la fin */ dest[j] = '\0'; j++; /* On realloue pour avoir la bonne taille */ res = realloc (dest, j); if (res) { return res; } else { return dest; } }
ne ferait pas mieux ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 char * str_pack_char( char * z , short c ) { char * s = z ; char * str = s ; if ( z != NULL ) { while( *z ) { if( *z != c ) *s++ = *z ; z++; } *s = '\0' ; } return str ; }
Mais bon la chaîne rétrécit mais pas son espace mémoire ...
Partager