剑指offer系列——替换空格?

Posted xym4869

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer系列——替换空格?相关的知识,希望对你有一定的参考价值。

Q:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
C:时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M
T:
我这是开辟了一个新的字符串帮助,实际上如果字符串较大就并不好。
讨论区主要方法:
1.从后往前插入,这样不需要另辟新的空间。

void replaceSpace(char *str,int length) {
        int oldlen=0,newlen=0;
        while(str[oldlen]!='')
        {
            if(str[oldlen]==' ')
                newlen+=2;
            newlen++,oldlen++;
        }
       //此时str[i]指向,而对于字符串来说结尾必须有
        newlen++;//给''占一个空间
        str[newlen--]='';
        while(newlen>oldlen&&oldlen>=0)
        {
            if(str[oldlen]==' ')
            {
                str[newlen--]='0';
                str[newlen--]='2';
                str[newlen--]='%';
            }
            else
                str[newlen--]=str[oldlen];
            oldlen--;
        }
}

2.把字符串转成string形式,再转回来。这样真的方便很多。但说实话,这样需要很强的string使用能力。

class Solution {
public:
    void replaceSpace(char *str,int length) {
        string s(str);
        int i=0;
        while((i=s.find(' ',i))>-1){
            s.erase(i,1);
            s.insert(i,"%20");
             
        }
        auto ret=s.c_str();
        strcpy(str,ret);
    }
};

3.如果可以……实际上直接用replace,方便快捷哈哈哈哈。

p.s.我有个小小的蠢蠢的问题,我在test里面直接赋值str后,输出的str却长度不满足……咋解决???

    int test() {
        int length = 13;
        char str[] = "We are happy";
        replaceSpace(str, length); //输出时str只有前13位……
    }

以上是关于剑指offer系列——替换空格?的主要内容,如果未能解决你的问题,请参考以下文章

剑指 Offer(C++版本)系列:剑指 Offer 05 替换空格

剑指offer系列——替换空格?

剑指offer系列02✨替换空格问题

《剑指Offer——5:替换空格》代码

java刷题--剑指offer05 替换空格

剑指offer题目系列一