【两日一练】学习记录
题目
- 将 字 符 串 中 的 空 格 替 换 成 “%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"); }
执行结果