剑指offer之把字符串里面空格替换成百分之20

举报
chenyu 发表于 2021/07/27 00:50:38 2021/07/27
【摘要】 1 问题 把字符串里面空格替换成百分之20       2 代码实现 第一种时间复杂的o(n * n)实现 #include <stdio.h>#include <stdlib.h> char* insert(char *a, int len, char *replace, int replaceLen){...

1 问题

把字符串里面空格替换成百分之20

 

 

 

2 代码实现

第一种时间复杂的o(n * n)实现


  
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. char* insert(char *a, int len, char *replace, int replaceLen)
  4. {
  5. //先得到多少个空格
  6. char *p = a;
  7. int count = 0;
  8. while (*p != '\0')
  9. {
  10. if (*p == ' ')
  11. {
  12. ++count;
  13. }
  14. ++p;
  15. }
  16. //计算新的字符串长度
  17. int newLen = len + count * (replaceLen - 1);
  18. char *newP = NULL;
  19. newP = (char *)malloc(newLen);
  20. if (!newP)
  21. {
  22. printf("malloc fail\n");
  23. }
  24. //新开辟内存的指针后面操作的时候
  25. //我们用新的指针变量保存新开辟内存的指针
  26. char *new = newP;
  27. //尽量不要修改原始字符串的指针位置
  28. char *head = a;
  29. //尽量不要修改原始需要替换字符串的位置
  30. char *rep = replace;
  31. while(*head != '\0')
  32. {
  33. if (*head != ' ')
  34. {
  35. *new++ = *head++;
  36. }
  37. else
  38. {
  39. *head++;
  40. while (*rep != '\0')
  41. {
  42. *new++ = *rep++;
  43. }
  44. //这里要记得移动指针完了之后复原替换字符串指针
  45. rep = replace;
  46. }
  47. }
  48. //尾巴要记得设置'\0'
  49. *new = '\0';
  50. //这里是申请了哪个内存指针就返回哪个
  51. //千万不要移动这个新开辟内存的指针
  52. //不然后面进行free(newP)就有问题
  53. return newP;
  54. }
  55. int main()
  56. {
  57. char a[] ="ab cd ef";
  58. int len = sizeof(a);
  59. char *chars = insert(a, len, "%20", 3);
  60. printf("chars is %s\n", chars);
  61. free(chars);
  62. return 0;
  63. }

 

 

 

3 运行结果

chars is ab%20cd%20ef
 

 

 

 

 

4 总结

1  在函数里面,如果我们新开辟内存的指针如果要返回,我们不要移动这个指针的位置,不然到时外面得到了开辟内存移动后的指针进行free的时候,会出问题,所以我们要用个指针变量保存这个新开辟内存的指针,然后用指针变量进行操作内存数据

2 在函数里面如果参数传递的是指针,我们尽量不要移动,用个指针变量保存函数参数里面的指针,然后用指针变量进行内存数据操作

文章来源: chenyu.blog.csdn.net,作者:chen.yu,版权归原作者所有,如需转载,请联系作者。

原文链接:chenyu.blog.csdn.net/article/details/86544701

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。