comment supprimer des espaces supplémentaires d’une chaîne en C

J’ai une chaîne qui a une chaîne d’espaces en plus, par exemple:

char * s = " foo baa "; 

Je veux le faire converger vers:

foo baa

J’ai écrit cette fonction:

 void sortingm (char ** src) { char * p = strdup(* src); char * ret = malloc(strlen(*src) + 1); assert(ret != NULL); char * token; token = strtok(p, " \t"); while( NULL != token ) { while (*token) { *(ret ++) = *(token ++); } token = strtok(NULL, " \t"); } printf("ret = %s\n", ret); } 

mais il m’a donné une chaîne vide de la valeur de la variable ret . quelqu’un peut signaler mon erreur? Merci d’avance.

Vous incrémentez ret dans votre temps, stockez l’adresse d’origine ou utilisez un indice pour accéder à différents caractères de ret .

  // snip char * ret = malloc(strlen(*src) + 1); assert(ret != NULL); char * ret_start = ret; //snap printf("ret_start = %s\n", ret_start); 

Autre solution naïve en c ++ (peut être facilement modifiée en code c) —– 🙂

count=0 initialement count=0 et str -> votre chaîne c ++

 for(i=0;i< str.size();i++) { if(str[i]!=' ') { str[j++]=str[i]; count=0; } else if(str[i]==' '&&count==0) { str[j++]=str[i]; count =1; } }