• 剑指offer2-替换空格


    题目描述

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

    思路:该问题我想到了两种思路。

    第一种比较简单。

    建立一个新的数组,对原字符串从头开始依次检测,若不为空就直接复制到新数组里,若为空,就将%20填入新数组,最后再整个复制到原数组里。

    第二种方法。

    1 遍历原字符串,找到所有的空格个数count(即一共有count个空格)。那么经过替换最终的数组长度newlength即为原字符串的长度加上count*2.

    2 对原字符串从后往前依次遍历,从str[length-1]开始遍历,若是不为空就直接复制到str[newlength-1],若是为空就填入%20,注意,因为是从后往前填充,所以应该先填0,再填2,最后填%。然后接着遍历原字符串。(注意,因为是从后往前填充,所以替换后的字符串是不会影响到原字符串中还没有检测到的那些前面的字符的)。

    代码:

    class Solution {
    public:
        void replaceSpace(char *str,int length) {
            if(str==NULL || length<=0)
            {
                return;
            }
            
            int count=0;
            int newlength;
            for(int i=0;i<length;i++)
            {
                if(str[i]==' ')
                {
                    count++;
                }
            }
            newlength = length+count*2;
            
            for(int i=length-1;i>=0;i--)
            {
                if(str[i]!=' ')
                {
                    str[newlength-1] = str[i];
                    newlength--; 
                }
                else
                {
                    str[newlength-1] = '0';
                    str[newlength-2] = '2';
                    str[newlength-3] = '%';
                    newlength -= 3;
                }
                    
            }
            
            
            
            
            /*
            //这个方法是构造一个新的数组,若原数组不为空格,就直接复制过去,若为空格,就依次将%20
            //复制过去,最后再复制到原数组,但是有问题所以换一种方式
            if(str==NULL||length==0)
            {
                return;
            }
            char *str1;
            int len = 0;
            for(int i=0;i<length;i++)
            {
                if(str[i]!=' ')
                {
                    str1[len] = str[i];
                    len++;
                }
                if(str[i]==' ')
                {
                    str1[len] = '%';
                    str1[len+1] = '2';
                    str1[len+2] = '0';
                    len = len+3;
                }
            }
            for(int i=0;i<len;i++)
            {
                str[i] = str1[i];
            }
            */
    
        }
    };
  • 相关阅读:
    Vue3.0实战项目
    Vue 笔试题(做对九题即可成为前端懂王)
    CSS 响应式布局---Grid 布局
    CSS快速提升技巧(一)
    前端骨架屏
    Python学习29
    Python学习28
    Python学习27
    Python学习26
    Python学习25
  • 原文地址:https://www.cnblogs.com/loyolh/p/12859463.html
Copyright © 2020-2023  润新知