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