123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- #include <stdio.h>
- #include <stdlib.h>
- #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;
- }
|