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)
有人可以解释一下,这段代码?这个函数清理数组中的空白区域,但有人可以解释一下它究竟是什么工作吗?
对于从字符串中删除空格的函数来说,这是一次相当松散的尝试.代码的问题在于它具有无偿迭代并且它将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)
我们执行整个字符串中的一个通带两个指针,src和dst.遇到非空格字符时,会将其从源复制到目标.将两个单独的指针保持在数组中避免了代码中的虚假迭代.
我忽略了n>15你的代码部分.这样做的结果是字符串总是被截断为长度不超过15个字符,但是为什么这样做对我来说是神秘的.肯定不应该混淆这个功能.
由于我没有按照要求回答这个问题,但由于我希望这对你有用,我已经做了答案社区维基.