替换空格-《剑指offer》

替换空格-《剑指offer》_第1张图片

 题目的要求是将空格全部换成%20

替换空格-《剑指offer》_第2张图片

    可以看到每有一个空格,我们用三个空间去存放%20,也就是每有一个空格我们要多两块空间,所以,我们可以开辟一块新的空间,将原来空间的数据拷贝过来,如果遇到了'   '就把他变成%20

 char* news=s;   
    int n=0;
    while(*news!='\0') //找出一共有多少个空格
    {
        if(*news==' ')
            n+=2;    //n为要添加的空间,一个空格要添加两个空间
        news++;     //将news往后挪一位
    }
    news=(char*)malloc(strlen(s)+n+1); //新开辟的空间大小strlen(s)是原来字符串的长度
                                       //不包括'\0',n空格数*2
    char* returns=news;   //returns是作为新空间的地址,后面会让news往后移,news指的不再是第一个元 素的地址
 

  空间开辟好了之后,接下来就是要考虑将原字符串中的内容拷贝到新地址上去

替换空格-《剑指offer》_第3张图片

 当s指向的数不是空格的话,直接将s的值给news

  替换空格-《剑指offer》_第4张图片

  当s指向的数是空格就在news的空间上存  '%'  , '2'  ,  '0'这三个字符,每存一个news往后挪一位,当s指向' \0 '时结束。

来看看具体代码:

 char* news=s;   
    int n=0;
    while(*news!='\0') //找出一共有多少个空格
    {
        if(*news==' ')
            n+=2;    //n为要添加的空间,一个空格要添加两个空间
        news++;     //将news往后挪一位
    }
    news=(char*)malloc(strlen(s)+n+1); //新开辟的空间大小strlen(s)是原来字符串的长度
                                       //不包括'\0',n空格数*2
    char* returns=news;   //returns是作为新空间的地址,后面会让news往后移,news指的不再是第一个元 素的地址
 while(*s!='\0')
   {
       if(*s!=' ')
            {
               *news=*s;  //当s指向的那个值不是空格时将s的值给news
               news++;
               s++;
            }
        else
            {
                *news='%';   
                news++;
                *news='2';
                news++;
                *news='0';  
                news++;
                s++;
            }
   }
   return returns;
}

你可能感兴趣的:(c语言)