【剑指offer面试题】--替换空格

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

面试题中所给的函数头是:
void replaceSpace(char *str,int length)
char* str 则是题目所给的字符串,而长度呢,应该就是可以存储的最大长度。如果是字符串常量那就没办法扩容,而且给length 也就没有意义了,因为我们用strlen()就可以求出长度了。
思路:
1.我们先求出现在为改变时字符串的长度,在遍历中求出空格的长度从而算出改变后的长度,如果长度>length则替换失败。
2.然后遍历找空格进行空格的替换,首先要把空格后的字符依存后移,给%20挪出空间记住只需要挪动两个空间,因为%号替换空格就可以了
cur 遍历用,oldlength原字符串长度,blanklength空格长度
end 挪动数据时要从最后一位开始挪,所以end标志的最后一位的位置。\0也要挪哦~

class Solution {
public:
    void replaceSpace(char *str,int length) {
        int oldlength = 0;
        char* cur = str;
        int blanklength = 0;
        while(cur[oldlength] != '\0')
        {
            if(cur[oldlength]==' ')
                blanklength++;
            oldlength++;
        }
        if(oldlength + 1 + blanklength*2 > length)
            return;
        cur = str;
        char* end = str + oldlength;
        int i = 0;
        while(cur[i] != '\0')
        {
            if(cur[i] == ' ')
            {
                cur[i]='%';
                char* pushflort = end;
                while(pushflort > cur + i)
                {
                    *(pushflort+2) = *pushflort;
                    pushflort--;
                }
                end += 2;
                cur[++i] = '2';
                cur[++i] = '0';
            }
            i++;
        }
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_40921797/article/details/81410001