如何从C中删除字符串中的额外空格

我有一个字符串,有一个额外的空格字符串,例如:

char * s = " foo baa "; 

我想把它转换成:

foo baa

我写过这个函数:

 void trim (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); } 

但是它给了我一个来自ret变量值的空字符串。 有人可能会指出我的错误? 提前致谢。

你正在递增ret ,存储原始地址或使用下标来访问ret不同字符。

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

c ++中的其他天真解决方案(可以很容易地改为c代码)—– 🙂

最初count=0str – >你的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; } }