#include #include #include "str.h" char** str_split(char* str, const char delim, int* length) { char** res; char* signet, * tmp = str; char last = 0; int compteur = 0, nb = 1, taille, count = 0; //Compte le nombre d'element while (*tmp) { if (*tmp == delim && last != delim) { nb++; } last = *tmp; tmp++; } //Creation du tableau res = malloc(sizeof (char*) * (nb + 1)); //Decoupage tmp = str; while (*tmp) { //Si c'est le dernier mot if (compteur == nb - 1) { //Ajoute tous ce qui reste res[compteur] = malloc(sizeof (char) * (strlen(str) - count)); int i = 0; while(*tmp){ res[compteur][i++] = *tmp; tmp++; } } else { //Recup la taille du mot signet = tmp; taille = 0; while (*tmp != delim) { taille++; tmp++; count++; } //Creation du mot res[compteur] = malloc(sizeof (char) * taille); //Ajout du mot for (int i = 0; i < taille; i++) { res[compteur][i] = *signet; signet++; } compteur++; //Passe les delimiteurs consecutif while (*tmp == delim) { tmp++; count++; } } } //Ajoute NULL à la fin res[nb + 1] = NULL; //Retour nombre de mot et tableau *length = nb; return res; } char* trim(char* str){ return ltrim(rtrim(str, ' '), ' '); } char* mtrim(char* str, char mask){ return ltrim(rtrim(str, mask), mask); } char* ltrim(char* str, char mask){ //Variable int cmpt = 0; char* res; //Compte le nombre d'espace while(str[cmpt] == mask){ cmpt++; } //Si aucun espace au debut if(cmpt == 0){ res = malloc(sizeof(char) * strlen(str)); strcpy(res, str); return res; } //Sinon creation nouvelle chaine res = malloc(sizeof(char) * (strlen(str) - cmpt + 1)); for(int i = 0, j = cmpt; i < (strlen(str) - cmpt); i++, j++){ res[i] = str[j]; } //Retour nouvelle chaine return res; } char* rtrim(char* str, char mask){ //Variable int cmpt = strlen(str) - 1; char* res; //Compte le nombre d'espace while(str[cmpt] == mask){ cmpt--; } //Si aucun espace au debut if(cmpt == strlen(str) - 1){ res = malloc(sizeof(char) * strlen(str)); strcpy(res, str); return res; } cmpt++; //Sinon creation nouvelle chaine res = malloc(sizeof(char) * (cmpt + 2)); for(int i = 0; i < cmpt; i++){ res[i] = str[i]; } //Retour nouvelle chaine return res; }