您的位置:首页 > 职场人生

剑指offer面试题[4]-空格替换

2017-05-31 20:11 330 查看


题目描述

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

以输入hello word为例分析:

代码及相应注释如下

#include <iostream>

using namespace std;

class Solution {

public:
void replaceSpace(char *str,int length)       //lengt为字符数组str的大小

       { 

        int number_space=0;  

        int str_length=0;

        if(str==NULL||length<=0)

            return;

        for(int i=0;i<length;i++)

            {

               if(*(str+i)==' ')

                   number_space++;               

               if(*(str+i)!='\0')  

                   str_length++;

            }

        int new_str_length=str_length+number_space*2;
        char *p1=str+str_length-1;                  //注意类型指针是字符类型, 指针p1为指向原始str的末尾最后一个字符(非‘\0’)。

        char *p2=str+new_str_length-1;       //指针p2为指向扩展后str的末尾最后一个位置(非‘\0’)。

        for(int i=str_length-1;i>=0;i--)

           {

              if(*p1!=' ')                                         //如果原始str的当前位置不为空,需要将其值赋给扩展数组
                 {                                                     //相应的p1和p2都向前移动一个位置

                     *p2=*p1;

                     p1--;

                     p2--;

                 }

              else                                                 //如果原始str的当前位置为空,则需要将扩招数组的连续三个元素赋为%20

                 {                    

                    *p2='0';                                     //特别需要注意的是这里的倒序输入,先0再2最后%

                    *(p2-1)='2';

                    *(p2-2)='%';

                    p1--;

                    p2=p2-3;                                 //注意这里3

                 }

            

           }                                                   
}
};

//主函数

void main()

{
char str[20]={"hello world"};       //注意这里的str大小一定要大于等于替换后的大小
int length=12;
Solution s;
s.replaceSpace(str,length);
cout<<str<<endl;

}

方法2:

/*class Solution {

public:
void replaceSpace(char *str,int length) 

    {

        int m = 0;

        for(int i = 0;i<length;i++)

            {

            if(*(str+i) == ' ')

                {

                m= i;

                length += 2;

                for(int j = length -1;;j--)

                     {

                    if(j -2 == m)

                        break;

                    else

                        *(str+j) = *(str+j-2);

                }

                *(str+m) = '%';

                *(str+m+1)= '2';

                *(str+m+2) = '0';

            }

      }

    }
};*/

结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  空格替换