如何从C中的字符串中删除多余的空格

时间:2012-03-12 20:24:19

标签: c whitespace

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

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变量值的空字符串。有人可能指出我的错误?提前致谢。

2 个答案:

答案 0 :(得分:3)

您正在逐渐增加ret,存储原始地址或使用下标来访问ret的不同字符。

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

答案 1 :(得分:0)

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