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
|
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
/* simple variable servant a parcourir un tableau */
int i;
/* La donnée d'entré */
char Data[] = "aaa\\0zzz\\0\\0";
/* La donnée de sortie, representant la donnée d'entré (Data)
mais ou toutes case adjacente ayant pour code \ et 0 seront fusionner
afin de donner '\0' */
char *Tableau = NULL;
/* Indice servant a parcourir respectivement les données d'entré et sortie.
indiceTableau, une fois la boucle while fini, representera la taille du tableau.
En effet, puisqu'en plein milieu du tableau on pourra avoir le symbole '\0'
sans pour autant que celui ci annonce la fin de chaine. strlen devient donc inadapté */
unsigned int indiceData = 0;
int indiceTableau = 0;
/* On compare les case par case adjacentes, donc on doit s'arreter a l'avant derniere */
while (indiceData < strlen(Data)-1)
{
/* Ajustement du tableau */
char *Temporaire = (char*) realloc(Tableau, (indiceTableau+1)*sizeof(char));
if (Temporaire == NULL)
{
perror("Probleme lors du realloc ");
printf("\nErreur survenue a l'indice %d.\n", indiceTableau);
exit(EXIT_FAILURE);
}
else
Tableau = Temporaire;
/* Insertion de la donné de Data dans tableau */
if (Data[indiceData] == '\\' && Data[indiceData+1] == '0')
{
Tableau[indiceTableau] = '\0';
/* Si '\0' est inserer, on doit "sauter" une case de plus car '\0'
est composer de '\\' et '0', soit deux case */
indiceData++;
}
else
Tableau[indiceTableau] = Data[indiceData];
indiceTableau++;
indiceData++;
}
/* affichage des caractere */
for (i=0 ; i<indiceTableau ; i++)
printf("Tableau[%d] : %c\n", i, Tableau[i]);
printf("\n\n");
/* Affichage du code des caractere */
for (i=0 ; i<indiceTableau ; i++)
printf("Tableau[%d] : %d\n", i, Tableau[i]);
} |
Partager