剑指offer 替换空格

替换空格

题目描述

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
 
思路:知识盲点==char类型的指针char* str,结尾的都是'',string结尾的也可能是'';char是内置类型,作为一个指针的时候不能指向string这种有class的对象。
        string str{ "string" };
    char word;
    vector<char> vec{ 'n','i' };
    char * test = &vec[0];    
    vec[0] = '0';
    cout << vec[0];
    for each(word in str) {
        cout << word;
    }

vector<char>里面只能初始化为'a' 这样的,不要初始化为“”“”,后面的这种事字符串。vector类型的使用指针的时候,要指向第一个元素的地址。string末尾没有''。

字符串数组可以直接进行修改,vec[0 = '0',但是如果是char* p = "string",这种就不能对内容进行修改,因为字符串string是一个常量,规定不能对常量进行修改,要修改必须先转化为数组才能进行修改。

使用字符串常量对字符数组进行初始化的时候,系统会自动在末尾加上字符串结尾符号'',但是定义的字符数组必须要有足够的长度。比如char p[] = "new",那么数组的长度要加上结束符号,就是len = 4;

这道题目一定要画图。

注意点1:统计空格长度的时候要复制一个指针,那个接口的length是指string的最大能开辟的长度。

注意点2:两个指针复制时,结束的条件是p1 == p2。

char *s;如果s == null,那么是不能对s进行*操作的。

class Solution {
public:
    void replaceSpace(char *str,int length) {
        if(str == NULL || length <= 0){
            return;
        }
        int num = 0,oldLen = 0;
        char *tmp = str;
        while(*tmp != ''){
            if(*tmp == ' '){
                ++num;
            }
            ++tmp;
            ++oldLen;
        }
        int newLen = oldLen + 2 * num;
        if(newLen > length){
            return;
        }
        char* pFront = str + oldLen;
        char* pLast = pFront + 2 * num;
        while(pFront != pLast){
            if(*pFront == ' '){
                *(pLast--) = '0';
                *(pLast--) = '2';
                *(pLast--) = '%';
            }
            else{
                 *(pLast--) = *pFront;   
            }
            --pFront;
        }
        return;
    }
};
原文地址:https://www.cnblogs.com/dingxiaoqiang/p/7427057.html