剑指offer_替换空格

题目描述

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

思路:

  • 1、新存一个字符串,遍历原字符串,遇到空格就把"%20"加进去,没有遇到就把旧的字符串中的字符加进入
  • 2、但是如果面试要求我们在原字符串上进行操作
    • 可以先遍历原字符串,找出空格字符的个数,每个空格字符替换掉就相当于增加了两个字符的长度。
    • 新字符串长度=原字符串长度+空格字符*2
    • 新建两个指针,point1和point2,指向新旧字符串的尾部
    • 从后往前扫描,若point1<=0时说明扫描完毕。(注意:前提是在point1
class Solution {
public:
    void replaceSpace(char *str,int length) {
        int sumlength=0;
        int empty = 0;
        for(int i=0;str[i]!='\0';i++){
            if(str[i] == ' '){
                empty++;
            }
        }
        sumlength = length+empty*2;
        if(sumlength<=length){
            return;
        }
        str[sumlength-1]='\0';
        int point1=length-1;
        int point2=sumlength-1;
        while(point1>=0&&point2>point1){
            if(str[point1]==' '){
                str[point2--]='0';
                str[point2--]='2';
                str[point2--]='%';
            }else{
                str[point2--]=str[point1];
            }
            point1--;
        }
        
    }
};

你可能感兴趣的:(剑指offer_替换空格)