当字符串开头没有空格时,为什么它不起作用?

时间:2018-11-30 10:53:36

标签: c

void RemoveSpaces(char *source){
  char* i=source;
  char* j = source;
  while(*j == ' '){
    j++;
  }
  while(*j!=0){
    *i++ = *j++;
  }

  /*edit:didn't work because 'i' pointed '\0'. İf we add here (i--;), will work */
  i--;//edit1.
  while(*i==' '){
    i--;
  }
  *++i='\0';
}

当字符串的开头和结尾都有空格时,它可以正常工作,但是如果开头没有空格,则不能正常工作。为什么?

result

1 个答案:

答案 0 :(得分:1)

void RemoveSpaces(char *source){
  char* i=source;
  char* j = source;
  while(*j == ' '){
    j++;
  }

如果没有前导空格,则i和j相同(并保持相同)。

  while(*j!=0){
    *i++ = *j++;
  }

您的循环在零终止符处停止。因此,您需要使用j而不是i从那里向后退:

添加了对零长度字符串的检查。

  if(j > source){
     while(*--j == ' ');

//      while(*i==' '){
//        i--;
//      }

还可以使用j插入空终止符。

   *++j='\0';
   }
//      *++i='\0';
}