帮小弟我调试一下,关于删除字符串空格

帮我调试一下,关于删除字符串空格.
C/C++ code

#include<stdio.h>
void main()
   {
    printf("\n\nbegin....\n");
    char *f4(char *);
    char a[20]="a  b f";
        printf("%s\n",f4(a));
   }
char *f4(char *p){
    int i=0;
    int j;
    while(p[i]!='\0')
        if(p[i++]==' ')
            for(j=i;p[j]!='\0';j++)
                p[j]=p[j+1];
    return p;
}




我调试了很久,好象只能去掉一个空格,两个空格就无法准确全部去掉

------解决方案--------------------
前几天还回了一个帖子呢
C/C++ code
/*   将字符串尾部的空格压缩掉   */   
char   *trim(  char   *s   )   
{   
    register   int   l;   
    
    for(l=strlen(s); l>0 && isspace((u_char)s[l-1]); l--) 
        s[l-1]='\0';   
    return(s);   
}   


/*   将字符串首部的空格压缩掉   */   
char   *ltrim( char   *s  )   
{   
    register   char   *p;   
    
    for(p=s; isspace((u_char)*p); p++);   
    if(p!=s)
        strcpy(s, p);   
    return(s);   
}

------解决方案--------------------
虽然和你要求的不一样
不过道理一样
把你的照着这个改一下就行了
------解决方案--------------------
C/C++ code

    while(p[i]!='\0')
    {
        if(p[i]==' ')
            for(j=i;p[j]!='\0';j++)
                p[j]=p[j+1];
        i++;
    }

------解决方案--------------------
#include<stdio.h>
void main()
{
printf("\n\nbegin....\n");
char *f4(char *);
char a[20]="a b f";
printf("%s\n",f4(a));
}
char *f4(char *p){
int i=0;
int j;
while(p[i]!='\0')
{
if(p[i]==' ')
{
for(j=i;p[j]!='\0';j++)
{
p[j]=p[j+1];
}
}
else
{
i ++;
}
}
return p;
}
----------------------------

WINXP + VC6.0
------解决方案--------------------
兴剑,今天有点空闲,我来帮你修改一下看看!
------解决方案--------------------
这样子你看能不能满足你的要求?
C/C++ code

#include <stdio.h>

void  f4(char *p)
{
      char *temp=p;
      while(*p)
      {
             if(*p!=' ')
                  *temp++=*p++;
             else
                  p++;
       }
       *temp=0;
}

void main()
{
       printf("\nbegin....\n");
       char a[]="   a  cd b     f   !"; //多弄几种形式的空格
       f4(a);
       printf("%s\n",a);
}

------解决方案--------------------
问题出在i++了~

石头的做法不错。*temp='\0';可以更明确点表示字符串结尾~~