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; } }