分析:

将字符串中的空格替换成三个字符'%','2','0';

一、创建另一个数组就太简单了,将字符串str的内容复制到新的数组中,当遇到‘ ’时就将输出%20;如果没有空格就将原字符串中的字符复制过来就好了;

二、计算出字符串中的空格数,然后将代替后的字符串长度算出来,因为代替时会将原字符串中的字符覆盖掉,因此我们应该遍历时遇到空格就将它后面的字符向后移两位,这样就可以将%20放进去,但是由于每次遇到空格都向后移一次,那么就没有效率,因此我们可以将最后一个字符一次移到最后。

步骤是这样的:

算出来字符串有13个字符('\0'),加上要代替的空格的空间,一共13+2*2=17个,那么我们可以将原来的长度赋值给oldlen=13,新长度赋值给newlen=17;

先将字符串的最后一个字符移到最后一个空间里,即‘\0’移到newlen的位置;

然后将‘y’移到倒数第二个位置,依次移动,当遇到 ‘ ’时先将'0'放进空格应该移到的位置,然后将'2''%'依次放入,之后继续将空格前面的一个字符移到'%'前面的位置;依次移动直到移动完为止;

代码如下:

#include<stdio.h>
#include<assert.h>
#include<string.h>
void replace_black(char *str)
{
    char *pstr=str;
    int oldlen=strlen(str);
    int newlen=0;
    int count=0;
    while(*pstr)
      {
        if(*pstr==' ')
           count ++;
        pstr++;
      }  
    newlen=oldlen+2*count;
  while(oldlen < newlen)
  {
    if(str[oldlen]==' ')
      {
           str[newlen--] = '0'; 
           str[newlen--] = '2';
           str[newlen--] = '%';
           oldlen--;
      }
     else
       str[newlen--]=str[oldlen--];
  }
}
int main()
{
  char str[20]="we are happy";
  replace_black(str);
  printf("%s",str);
  return 0;
}