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';
}
我们使用两个指针 src
和 dst
对字符串执行一次传递。当遇到非空格字符时,会将其从源复制到目标。在数组中维护两个单独的指针可以避免代码中的虚假迭代。
我忽略了代码的 n>15
部分。这样做的效果是字符串总是被截断为长度不超过 15 个字符,但为什么要这样做对我来说很神秘。它肯定不应该在这个函数中混淆。
由于我没有真正回答所提出的问题,但由于我希望这对您有用,所以我制作了答案社区维基。
关于c - 这是如何清理数组中的空白空间的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8548406/