每日一题 剑指offer(替换空格)

编程是很多偏计算机、人工智能领域必须掌握的一项技能,此编程能力在学习和工作中起着重要的作用。因此小白决定开辟一个新的板块“每日一题”,通过每天一道编程题目来强化和锻炼自己的编程能力(最起码不会忘记编程)

特别说明:编程题来自“牛客网”和“领扣”以及热心小伙伴的题目。由于小白有时想锻炼某一类编程方法,所以提供的代码不一定是最优解,但是本文提供的编程代码均为通过测试代码。

题目描述

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

解析

本题有两种思路,第一种是从前往后替换,但是这样移动的次数比较多,不是很推荐,但是也可以实现功能。第二种是从后往前开始替换。这种方式移动的次数比较少。

首先我们需要遍历字符串找到空格的位置,之后记录按照从后往前的顺序依此替换就可以了。但是这里面切记要注意对末尾的’\0’的处理。

代码

class Solution {
public:
 void replaceSpace(char *str,int length) {
       //遍历一边字符串找出空格的数量
       if(str==NULL||length<0)
           return ;
       int i=0;
       int oldnumber=0;//记录以前的长度
       int replacenumber=0;//记录空格的数量
       while(str[i]!='\0')
           {
              oldnumber++;
              if(str[i]==' ')
                  {
                    replacenumber++;
                  }
                 i++;
           }
       int newlength=oldnumber+replacenumber*2;//插入后的长度
       if(newlength>length)//如果计算后的长度大于总长度就无法插入
           return ;
       int pOldlength=oldnumber; //注意不要减一因为隐藏个‘\0’也要算里
       int pNewlength=newlength;
       while(pOldlength>=0&&pNewlength>pOldlength)//放字符
           {
             if(str[pOldlength]==' ') //碰到空格就替换
                 {
                    str[pNewlength--]='0';
                    str[pNewlength--]='2';
                    str[pNewlength--]='%';
                   
                 }
              else //不是空格就把pOldlength指向的字符装入pNewlength指向的位置
              {
                   str[pNewlength--]=str[pOldlength];
                 
              }
            pOldlength--; //不管是if还是elsr都要把pOldlength前移
           
          }
 }
};
(0)

相关推荐

  • C/C++之常用字符串比较总结

    C/C++之常用字符串比较总结

  • 每日一题 剑指offer(包含min函数的栈)

    编程是很多偏计算机.人工智能领域必须掌握的一项技能,此编程能力在学习和工作中起着重要的作用.因此小白决定开辟一个新的板块"每日一题",通过每天一道编程题目来强化和锻炼自己的编程能力 ...

  • 每日一题 剑指offer(从上往下打印二叉树)

    编程是很多偏计算机.人工智能领域必须掌握的一项技能,此编程能力在学习和工作中起着重要的作用.因此小白决定开辟一个新的板块"每日一题",通过每天一道编程题目来强化和锻炼自己的编程能力 ...

  • 每日一题 剑指offer(二叉搜索树的后序遍历序列)

    编程是很多偏计算机.人工智能领域必须掌握的一项技能,此编程能力在学习和工作中起着重要的作用.因此小白决定开辟一个新的板块"每日一题",通过每天一道编程题目来强化和锻炼自己的编程能力 ...

  • 每日一题 剑指offer(机器人的运动范围)

    编程是很多偏计算机.人工智能领域必须掌握的一项技能,此编程能力在学习和工作中起着重要的作用.因此小白决定开辟一个新的板块"每日一题",通过每天一道编程题目来强化和锻炼自己的编程能力 ...

  • 每日一题 剑指offer(二叉树中和为某一值的路径)

    编程是很多偏计算机.人工智能领域必须掌握的一项技能,此编程能力在学习和工作中起着重要的作用.因此小白决定开辟一个新的板块"每日一题",通过每天一道编程题目来强化和锻炼自己的编程能力 ...

  • 每日一题 剑指offer(栈的压入和序列弹出)

    编程是很多偏计算机.人工智能领域必须掌握的一项技能,此编程能力在学习和工作中起着重要的作用.因此小白决定开辟一个新的板块"每日一题",通过每天一道编程题目来强化和锻炼自己的编程能力 ...

  • 每日一题 剑指offer(二叉树镜像)

    编程是很多偏计算机.人工智能领域必须掌握的一项技能,此编程能力在学习和工作中起着重要的作用.因此小白决定开辟一个新的板块"每日一题",通过每天一道编程题目来强化和锻炼自己的编程能力 ...

  • 每日一题 剑指offer(调整数组顺序)

    编程是很多偏计算机.人工智能领域必须掌握的一项技能,此编程能力在学习和工作中起着重要的作用.因此小白决定开辟一个新的板块"每日一题",通过每天一道编程题目来强化和锻炼自己的编程能力 ...

  • 每日一题 剑指offer(旋转数组的最小数字)

    编程是很多偏计算机.人工智能领域必须掌握的一项技能,此编程能力在学习和工作中起着重要的作用.因此小白决定开辟一个新的板块"每日一题",通过每天一道编程题目来强化和锻炼自己的编程能力 ...