C中的数组中的空白空间

时间:2011-12-17 22:35:24

标签: 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';
}

有人可以解释一下,这段代码?这个函数清理数组中的空格,但是有人可以解释一下它的确切作用吗?

4 个答案:

答案 0 :(得分: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';
}

我们使用两个指针srcdst对字符串执行单次传递。遇到非空格字符时,会将其从源复制到目标。将两个单独的指针保持在数组中可以避免代码中的虚假迭代。

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

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

答案 1 :(得分:1)

以上的重写和评论版本:

//....
n = strlen(array); // n is the number of characters in the array up to the final 0
while (i < n) {
    if (array[i] != ' ') { // not a space
        i++;               // next char,
        continue;          // continue
    }

    j = i; // j is the current array index

    while (j < n) {        // while there are chars left...
        array[j] = array[j+1]; // copy the next character into the current index
        j++;
    }
    n--;                   // and remove one from the string len since a space is removed
}

之后的代码在返回之前将字符串长度限制为15.

因此,此代码删除空格可能仅将字符串截断为15个字符。

答案 2 :(得分:0)

它遍历数组中的每个字符,删除所有''(空格)字符。内循环是擦除的内容。当外循环找到一个空格字符时,内循环将数组的其余部分“移动”到左边的一个索引,覆盖空格。

答案 3 :(得分:-1)

基本上,一旦循环遇到' '字符(空格),它就会将数组的所有元素移动到一个“左”的位置,因此用以下字符替换空格。