c - 这是如何清理数组中的空白空间的?

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

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

最佳答案

这是一个从字符串中删除空格的函数的相当松散的尝试。该代码的问题在于它有无偿迭代,并将 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 个字符,但为什么要这样做对我来说很神秘。它肯定不应该在这个函数中混淆。

由于我没有真正回答所提出的问题,但由于我希望这对您有用,所以我制作了答案社区维基。

关于c - 这是如何清理数组中的空白空间的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8548406/

相关文章:

c - 在 BST 中插入节点的问题(迭代方法)

c - 尝试制作链表,出现段错误

c - 在 C 中释放内存时出错

c - 如何访问双指针类型参数作为二维数组?

C malloc 语法

c - 在循环中调用 fscanf 后,Dev C++ 崩溃

python - 是否有用于 Python 数组同步改组的惯用语或 API?

java - 通过 java 2D ArrayList 字符串进行矩阵搜索以查找重复实例,广度优先?

java - 使用 jsonpath 表达式的数组大小 - Stefan Goessner JsonPath

php - 如何在php中将二维数组转换为一维数组?