【剑指offer】替换字符串

来源:互联网 发布:手机淘宝怎么上传产品 编辑:程序博客网 时间:2024/04/30 13:30

题目:请实现一个函数,把字符串中的每个空格替换成“%20”,例如输出“We are happy”,则输出“We%20are%20happy”.

//思路:如果直接替换,就有可能覆盖修改在字符串后面的内存。如果创建新的字符串并在新的字符串上做替换,我们就可以分配足够多的内存。//对于任何一个函数,我们要做哪些基本的检测//1.传入的参数有效性//2.函数体边界的判断//3.返回值正确返回void ReplaceBlank(char str[], int length){    if (str == NULL||length<=0)    {        return;    }    //originalLength为字符串原始长度    int originalLength = 0;    int numberOfBlank = 0;    int i = 0;    while (str[i] != '\0')    {        if (str[i] == ' ')        {            ++numberOfBlank;        }        ++i;        ++originalLength;    }    //newLength 为把空格替换为%20后字符串长度    int newLength = originalLength + 2 * numberOfBlank;    if (length < newLength)    {        return;    }    //从后往前拷,减少了挪动字符次数,因为后面都是放置好的元素    //需要两个指针,分别指向两个位置,若两个位置值相等,则拷贝结束    int indexOfOriginal = originalLength;//该指针指向的元素内容为'\0',因为字符串中字符的个数(不包含'\0')指向的'\0'    int indexOfNew = newLength;    //开始替换    while (indexOfOriginal < indexOfNew&&indexOfOriginal >= 0)    {        //从后往前拷,第一个        if (str[indexOfOriginal] == ' ')        {            str[indexOfNew--] = '0';            str[indexOfNew--] = '2';            str[indexOfNew--] = '%';            }        else        {            str[indexOfNew--] = str[indexOfOriginal];        }        --indexOfOriginal;    }}
0 0
原创粉丝点击