在一个数组内去掉空格有很多种解法,最差那种就是遇到一个空格把后面所有元素的往前移一次,这样下来复杂度是O(o^2),这肯定不可取,当然最好的就是遍历一遍就把空格弄掉,这是可以做到的,这样复杂度就变成o(n)了,当然既然这种算法能弄掉空格也可适用于其他值。
算法:原理其实就是插空,我们用一个变量记录空格数,我们每遇到一个空格就把这个数加一,说明前边多了一个空需要非空格去补充,当遇到非空格的时候,那直接让他去插前面多出来空格的位置,简而言之 a[i-k]=a[i] (k为空格个数)。
这样只需要O(N)就简单解决了。
代码如下
#include<stdio.h>
#include<string.h>
void deletespace(char a[])//n为数组个数
{
int n=strlen(a);
int i;
int k=0;//记录空格的个数,方便非空格字符转移
for(i=0;i<n;i++)
{
if(a[i]==' ')
{
k++;
}
else
{
a[i-k]=a[i];
}
}
a[n-k]='\0';
}
int main()
{
char a[100];
while(gets(a))
{
deletespace(a);
printf("%s\n",a);
}
return 0;
}