C中的数组中的空白空间

-2 c arrays

void empty_spaces(char array[]){
 int j=0,i=0,n=0;
 n=strlen(array);
 while(i<n){
    if(array[i]==' '){
        j=i;
        while(j<n){
             array[j]=array[j+1];
             ++j;
        }
        --n;
    }else
         ++i;
 }
 if(n>15)
         n=15;
 array[n]='\0';
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下,这段代码?这个函数清理数组中的空白区域,但有人可以解释一下它究竟是什么工作吗?

Dav*_*nan 5

对于从字符串中删除空格的函数来说,这是一次相当松散的尝试.代码的问题在于它具有无偿迭代并且它将O(n)算法转换为O(n ^ 2)算法.

而不是试图理解你所拥有的代码,我觉得最好以高效和简单的方式来做.像这样.

void empty_spaces(char str[])
{
    char *src = str; 
    char *dst = str;

    while (*src)
    {
        if (*src != ' ')
        {
            *dst = *src;
            dst++;
        }
        src++;
    }
    *dst = '\0';
}
Run Code Online (Sandbox Code Playgroud)

我们执行整个字符串中的一个通带两个指针,srcdst.遇到非空格字符时,会将其从源复制到目标.将两个单独的指针保持在数组中避免了代码中的虚假迭代.

我忽略了n>15你的代码部分.这样做的结果是字符串总是被截断为长度不超过15个字符,但是为什么这样做对我来说是神秘的.肯定不应该混淆这个功能.

由于我没有按照要求回答这个问题,但由于我希望这对你有用,我已经做了答案社区维基.