替换空格

来源:互联网 发布:ubuntu 14.04 反应慢 编辑:程序博客网 时间:2024/05/23 16:17

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
从后往前,先计算需要多少空间,然后从后往前移动,则每个字符只为移动一次,这样效率更高一点。


class Solution { public:void replaceSpace(char *str,int length) {  //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+2*replaceNumber; //插入后的长度         if(newLength > length)//如果计算后的长度大于最大长度就无法插入             return;        int pNewLength = newLength; //记录新的字符串的长度        int pOldLength = oldNumber; //记录以前字符串的长度        while((pOldLength>=0)&&(pOldLength<pNewLength)){            if(str[pOldLength]==' '){ //碰到空格就替换                str[pNewLength--] = '0'; //从后往前替换                str[pNewLength--] = '2';                str[pNewLength--] = '%';            }            else{//不是空格就把pOldlength指向的字符装入pNewlength指向的位置                 str[pNewLength--]= str[pOldLength];            }            pOldLength--;//不管是if还是else都要把pOldlength前移        }    }};