分析:
在这个程序中,一个空格占一个字节空间,而20%占三个字节,所以直接将空格换成20%肯定是行不通的,
所以就需要对原来的内存进行扩容,将一个空格的字节数增大到三个字节数,所以扩容之后的总字节数为:strlen(str)+2*空格数
扩容完成之后,就到放数据的的问题了,一般大家都会想着从前往后依次把数据放到新的内存里就好了,这样的话就会出现一个问题,当放到20%的时候就会把后面的ar覆盖掉,再往后就会出现错误,所以我们要从后往前存入数据。
以下就是代码实现部分:
#include<stdio.h>
#include<string.h>
void *replaceblank(char *buf)
{int i = 0;int j = 0;int count = 0;for (i = 0; buf[i] != 0; i++){if (buf[i] == ' ')count++;}int newlen = strlen(buf) + 2 * count;i = strlen(buf);j = newlen;for (; i >= 0; i--){if (buf[i] == ' '){buf[j--] = '0';buf[j--] = '2';buf[j--] = '%';}else{buf[j--] = buf[i];}}
}
int main()
{char str[] = "we are happy.";replaceblank(str);printf("%s\n",str);system("pause");return 0;
}
运行结果: