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
|
void strExplode(const char* sChaine, const char separator, int iLnOfExpMax, char **sOutExp, int *iOutNExp){
int i,
iDeb = 0, // Marque le debut d'une nouvelle chaine
iIndice = 0, // OffSet de parcours dans le tableau de chaine
ln = strlen(sChaine); // Longueur totale de la chaine
(*iOutNExp) = 0; // nombre de separateur trouve
// Nombre d'occurence du separateur dans la chaine
for(i=0; i<ln; i++){
if (sChaine[i] == separator){
(*iOutNExp)++;
}
}
// Allocation de la mémoire
sOutExp = (char **) malloc ( (*iOutNExp) * sizeof (char *) ); // allocation d'un tableau de pointeur sur "iOutNExp" chaines
for(i=0; i<(*iOutNExp);i++){
*(sOutExp+i) = (char *) malloc ( iLnOfExpMax * sizeof (char) ); // allocation d'une chaine de longueur "iLnOfExpMax"
}
for(i=0; i<ln; i++){
if (sChaine[i] == separator){
strncpy(*(sOutExp+iIndice), sChaine + iDeb, i-iDeb); // copie du segment selectionne
*( *(sOutExp+iIndice) + i - iDeb) = 0; // caractere de fin de chaine
iIndice++;
iDeb = i+1; // Repositionnement de l'OffSet
}
}
/*
for (i=0; i<(*iOutNExp); i++){
gotoxy(0,4+i);
printf("%s", sOutExp[i]);
}
// Libération de la memoire
for(i=0; i<(*iOutNExp);i++){
free( *(sOutExp+i) );
}
free(sOutExp);
/**/
} |