C中的空白空间
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';
}
有人可以解释我,这段代码吗?这个函数清理数组中的空白空间,但是有人能够解释它到底是什么工作吗?C中的空白空间
它遍历数组中的每个字符,删除所有''(空格)字符。内循环是什么擦除。当外部循环找到一个空格字符时,内部循环将数组的其余部分“移动”到左边的一个索引处,覆盖空间。
基本上,一旦循环遇到' '
字符(空格),它将数组中的所有元素都移动到“左”位置,因此用下列字符替换空格。
请在你的回答中更具描述性。并且通常提供示例代码。 – 2018-01-27 08:07:09
这是一个相当松弛的尝试,在一个函数中删除字符串中的空格。代码的问题是它有无偿迭代,它将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个字符,但是为什么这样做对我来说是神秘的。这个功能当然不应该混淆在一起。
由于我没有真正回答这个问题,但因为我希望这对你有用,所以我做了答案社区wiki。
重写和上述的注释版本:
//....
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个字符只。
好吧,你总是可以在调试器中运行它,并逐步了解它的含义。之后,您可以回到这里,回答一个具体的问题...... – 2011-12-17 22:38:36
这段代码中您的混淆源究竟是什么? – Lion 2011-12-17 22:39:05
它似乎压缩所有的空白。然后截断数组的长度为15. – 2011-12-17 22:39:48