码迷,mamicode.com
首页 > 其他好文 > 详细

【02】char字符与字符串替换,双指针,从后往前

时间:2020-02-21 20:46:01      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:pac   oid   思路   origin   情况下   双指针   存在   while   pos   

PRE

给了两种,一个参数为char(较难),一个参数为string,用内置函数就行。

题目

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

思路

由于这题给的参数是char指针,不能直接使用string的replace方法,但是参考他人题解,发现了一个比较巧妙的双指针,不额外创建字符串的方法。

收获

双指针,指针1指向原串末尾,指针2只想原串扩充之后的末尾,然后共同递减,当指针1==指针2的时候,说明替换成功了,因为只有不存在空格的情况下,双指针才能重叠。

代码

class Solution {
public:
    void replaceSpace(char *str,int length) {
        if(str==NULL) return ;
        int CountOfSpace = 0;
        int OriginSize = 0;
        for(int i = 0;str[i]!='\0';i++){
            OriginSize++;
            if(str[i]==' ') 
                CountOfSpace++;
        }
        int len = OriginSize+2*CountOfSpace;
        if(len+1>length) return ;
        char *pstr1 = str+OriginSize;//结束符
        char *pstr2 = str+len;
        while(pstr2>pstr1){
            if(*pstr1==' '){
                *pstr2-- = '0';
                *pstr2-- = '2';
                *pstr2-- = '%';
            }
            else *pstr2--=*pstr1;
            pstr1--;
        }
    }
};

string

class Solution {
public:
    string replaceSpace(string s) {
        int pos = s.find(" ");
        while(pos<s.size()){          
            s.replace(pos,1,"%20");
            pos = s.find(" ");
        }
        return s;
    }
};

【02】char字符与字符串替换,双指针,从后往前

标签:pac   oid   思路   origin   情况下   双指针   存在   while   pos   

原文地址:https://www.cnblogs.com/Jun10ng/p/12342714.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!