题目描述

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

以输入hello word为例分析:

代码及相应注释如下

#include <iostream>
using namespace std;

class Solution {

public:

void replaceSpace(char *str,int length)       //lengt为字符数组str的大小

{

int number_space=0;  
        int str_length=0;
        if(str==NULL||length<=0)
            return;
        for(int i=0;i<length;i++)
            {
               if(*(str+i)==' ')
                   number_space++;               
               if(*(str+i)!='\0')  
                   str_length++;
            }
        int new_str_length=str_length+number_space*2;

char *p1=str+str_length-1;                  //注意类型指针是字符类型, 指针p1为指向原始str的末尾最后一个字符(非‘\0’)。

char *p2=str+new_str_length-1;       //指针p2为指向扩展后str的末尾最后一个位置(非‘\0’)。

for(int i=str_length-1;i>=0;i--)
           {
              if(*p1!=' ')                                         //如果原始str的当前位置不为空,需要将其值赋给扩展数组

{                                                     //相应的p1和p2都向前移动一个位置

*p2=*p1;
                     p1--;
                     p2--;
                 }
              else                                                 //如果原始str的当前位置为空,则需要将扩招数组的连续三个元素赋为%20
                 {                    
                    *p2='0';                                     //特别需要注意的是这里的倒序输入,先0再2最后%
                    *(p2-1)='2';
                    *(p2-2)='%';
                    p1--;
                    p2=p2-3;                                 //注意这里3
                 }
            
           }                                                   
}

};

//主函数

void main()
{
char str[20]={"hello world"};       //注意这里的str大小一定要大于等于替换后的大小
int length=12;
Solution s;
s.replaceSpace(str,length);
cout<<str<<endl;
}

方法2:

/*class Solution {

public:
void replaceSpace(char *str,int length) 
    {
        int m = 0;
        for(int i = 0;i<length;i++)
            {
            if(*(str+i) == ' ')
                {
                m= i;
                length += 2;
                for(int j = length -1;;j--)
                     {
                    if(j -2 == m)
                        break;
                    else
                        *(str+j) = *(str+j-2);
                }
                *(str+m) = '%';
                *(str+m+1)= '2';
                *(str+m+2) = '0';
            }
      }
    }

};*/

结果:

剑指offer面试题[4]-空格替换相关推荐

  1. 剑指offer——面试题4:替换空格

    #剑指offer--面试题4:替换空格 此题的关键思路在于字符串的从后向前复制!!! class Solution { public:void replaceSpace(char *str,int l ...

  2. python剑指offer替换空格_迷人的算法-剑指offer面试题5:替换空格

    题目:请实现一个函数,把字符串中的每个空格替换成"%20". 例如,输入"We are happy.",则输出"We%20are%20happy.&q ...

  3. 剑指offer系列-----item3字符串空格替换

    题干: 请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 分析: 这题 ...

  4. 【剑指Offer面试题】 九度OJ1510:替换空格

    c/c++ 中的字符串以"\0"作为结尾符.这样每一个字符串都有一个额外字符的开销. 以下代码将造成内存越界. char str[10]; strcpy(str, "01 ...

  5. 剑指offer——面试题49:把字符串转换成整数

    剑指offer--面试题49:把字符串转换成整数 Solution1: 代码写的啰嗦,但思路清晰..LeetCode上有相似的题目并考虑了溢出,可以参考LeetCode8答案 class Soluti ...

  6. 剑指offer 面试题三 找出数组中重复的数字

    1 import org.junit.Test; 2 3 import java.util.Arrays; 4 import java.util.HashSet; 5 6 public class D ...

  7. [剑指offer]面试题第[68-2]题[Leetcode][第236题][JAVA][二叉搜索树的最近公共祖先][递归]

    [问题描述][中等] 235/68-1 搜索二叉树 236/68-2 二叉树 [解答思路] 递归 时间复杂度:O(N) 空间复杂度:O(N) 情况 1. , 2. , 3. , 4. 的展开写法如下. ...

  8. [剑指offer]面试题第[57]题[Leetcode][第167题][JAVA][和为s的两个数字][两数之和][HashSet][二分][双指针]

    [剑指offer]面试题第[57]题[Leetcode][第167题][第1题] 有序无序之分 题目输出不同之分 以下解法按照[剑指offer]面试题第[57]题进行题解 [问题描述][简单] 输入一 ...

  9. 两个数组中对应的下标的值合成一个新的数组_剑指 offer 面试题精选图解 03 . 数组中重复的数字

    今天分享的题目来源于 LeetCode 上的剑指 Offer 系列 面试题03. 数组中重复的数字. 题目链接:https://leetcode-cn.com/problems/shu-zu-zhon ...

最新文章

  1. php增删改查前后端分离,前后端分离之前端增删改查
  2. Warning: Each child in a list should have a unique “key“ prop.
  3. [转]linux文件同步工具Unison的使用
  4. linux判断目录,文件存在等
  5. linux命令历史详解
  6. WINCE6.0深入理解TOC
  7. 编译成功但链接失败的原因
  8. HTML5 Canvas 绘制旋转45度佛教万字
  9. 阿里妈妈技术团队5篇论文入选 SIGIR 2022!
  10. Python中的append()和extend()
  11. 数据库实验四 用户权限管理
  12. 如何在linux上创建数据库,在LINUX平台上手动创建数据库(oracle 10g)
  13. java第十四次作业
  14. ggbiplot设置分组_prcomp和ggbiplot:无效的’rot’值
  15. 如何成为Emacs高手,像神一样使用编辑器
  16. C++builder应用程序设计流程
  17. Jpeg怎么变成jpg格式?教你三步快速转换格式
  18. 实现调用阿里云API第一章——API请求与认证
  19. 被蠢人、穷人与聪明人放弃的“概率权”
  20. MySql只能用localhsot或者127.0.0.1连接

热门文章

  1. 解决flash的虚框问题
  2. 4-2 数据模型的生成
  3. 腾讯内部转岗_别了,腾讯微博!
  4. c++ enum 给定类型_C++ 枚举类型详解
  5. 如何java面试_短时间如何过java面试?
  6. mysql2005安装asp_asp连接sql server2005数据库
  7. VLD(Visual LeakDetector)内存泄露工具的使用
  8. C++类的构造函数、析构函数与赋值函数
  9. 机器视觉:偏振片应用
  10. Halcon例程学习:print_check.hev(光学字符检测)