分析:
将字符串中的空格替换成三个字符'%','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; }