题目
- 将 字 符 串 中 的 空 格 替 换 成 “%020” , 例 如
“hello world how ” -> ”hello%020%020%020world%020%020%020how%020%020%020%020”
思路
如果遇到空格就换为020%即可,存到另外一个数组。
拓展
这道题难的地方在于如果要求在当前空间处理,没有额外的空间,那么就是倒着去遍历,从最后拿空格,换为%020
其实正着存也可以;正着存,遇见空格往后移三位。但是这样也会导致 时间复杂度 很高(因为移动次数相比倒着遍历的方式来说要多);因此选择最优的——即倒着存
代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void replace_space()
{
char c[100];
int i,count,j;
char *p;//指向我们最终使用的空间
while(gets(c)!=NULL)
{
i=0,count=0;
while(c[i])
{
if(c[i]==' ')
{
count++;//计算空格的数目
}
i++;
}
p=(char*)calloc(1,strlen(c)+3*count+1);
for(i=strlen(c)-1,j=strlen(c)+3*count-1;i>=0;i--)
{
if(c[i]==' ')
{
p[j]='0';
p[j-1]='2';
p[j-2]='0';
p[j-3]='%';
j=j-4;
}else{
p[j]=c[i];
j--;
}
}
printf("%s\n",p);
free(p);
p=NULL;
}
}
int main()
{
replace_space();
system("pause");
}执行结果

京公网安备 11010502036488号