1.题目

# 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

 2.思路

# 从头到尾遍历字符串做替换,时间复杂度为O(n2),效率低

# 从尾到头遍历字符串做替换,时间复杂度为O(n),效率高

 3.举例(从尾到头遍历字符串)

# 边界检查,判断字符数组是否为空

# 遍历字符串,统计空格总数count_space,统计替换前字符个数count_old,统计替换后字符个数count_new,其中count_new = count_old + 2*count_space

# 边界检查,判断字符数组是否越界

# 替换空格,用指针P1指向原始字符串的末尾,指针P2指向替换后字符串的末尾。向前移动指针P1,如果P1指向的元素不是空格,则将P1指向的元素复制给P2指向的位置;如果P1指向的元素是空格,则P2依次向前移动并插入%20。当P1==P2时,结束替换。

4.code

# C++字符数组存储字符串,字符数组中编译器自动添加字符串的结束标识’\0’,字符串结束标识在字符数组中占一个位置,注意字符数组的越界问题。

 class Solution {
public:
// 指向字符数组的字符指针str,字符数组长度length
void replaceSpace(char *str,int length) { // 边界检查1:判断字符数组是否为空
if(str==NULL)
return ;
// 遍历字符串,统计空格个数、替换前字符个数、替换后字符个数
int CountOfBlanks=0; // 空格个数
int Originallength=0;// 替换前字符个数
int len=0; // 替换后字符个数 for(int i=0;str[i]!='\0';++i)
{
Originallength++;
if(str[i]==' ')
++CountOfBlanks;
} len =Originallength+2*CountOfBlanks; // 边界检查2:判断字符数组是否越界
if(len+1>length)
return ; // 替换空格
char*pStr1=str+Originallength;// 字符指针指向原始字符串的末尾
char*pStr2=str+len; // 字符指针指向替换后字符串的末尾 while(pStr1 != pStr2) // 替换结束的条件
{
if(*pStr1==' ')
{
*pStr2--='0';
*pStr2--='2';
*pStr2--='%';
}
else
{
*pStr2--=*pStr1;
}
--pStr1;
}
}
};

最新文章

  1. ASP.net 使用ConfigurationManager获取连接字符串
  2. FAT32 FAT区__FAT表解析
  3. iOS 图片大小压缩 图片尺寸处理
  4. Python基础、异常处理
  5. 7 -- Spring的基本用法 -- 1...2
  6. vim 分屏显示
  7. 【solr】之solr界面查询返回距离并排序
  8. maven安装(linux)
  9. Android文件系统的结构
  10. NSAssert用法
  11. HDU 1061
  12. 站点接入QQ登录
  13. oracle中backup模式
  14. 博弈论(Game Theory) - 03 - 前传之最大最小均衡
  15. CentOS、Ubuntu配置网卡子接口
  16. Python的几个常用模块
  17. Tomcat服务器的配置
  18. SpringBoot初探之Swagger配置
  19. linux4.10.8 内核移植(二)---初步裁剪、分区修改和文件系统
  20. luogu P3198 [HNOI2008]遥远的行星

热门文章

  1. SpringAOP简单入门
  2. Springboot中使用AOP统一处理Web请求日志
  3. 如何通过命令或脚本方式在Windows上访问linux系统
  4. 开发步骤Dubbo、spring mvc、springboot、SSM整合开发步骤
  5. Java Cookie和Session
  6. Percona监控MySQL模板详解
  7. CentOS 7 yum 安装 MySQL5.7
  8. python使用上下文管理器实现sqlite3事务机制
  9. 《.NET 设计规范》第 3 章 命名规范
  10. 安装redis 2.6.4