简体   繁体   English

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

[英]how to remove extra spaces from string in C

I have an string that have an extra spaces string, for example: 我有一个带有多余空格的字符串,例如:

char * s = "  foo    baa       ";

I want to conver it to: 我想将其转换为:

foo baa

I have wrote this function: 我写了这个函数:

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

but it given for me an empty string from ret variable value. 但是它为我提供了一个来自ret变量值的空字符串。 someone may point out my mistake? 有人可能会指出我的错误? thanks in advance. 提前致谢。

You are incrementing ret in your while, store the original address or use subscript to access different chars of 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);

Other naive solution in c++(can be easily changed to c code )----- :) C ++中的其他幼稚解决方案(可以轻松更改为C代码)----- :)

initially count=0 and str -> your c++ string 最初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;
        }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM