• 剑指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];
            }
            */
    
        }
    };
  • 相关阅读:
    [转]How do I use variables in Oracle SQL Developer?
    [转]一张图理解prototype、proto和constructor的三角关系
    [转]ASP.NET Web API系列教程(目录)
    [转]解读ASP.NET 5 & MVC6系列(7):依赖注入
    [转]什么?你还不会写JQuery 插件
    [书目20170314]理解未来的7个原则
    java List.subList方法中的超级大陷阱
    MyBatis动态传入表名,字段名参数的解决办法---statementType用法
    lvs+keepalived和haproxy+heartbeat区别
    Nginx/LVS/HAProxy负载均衡软件的优缺点详解
  • 原文地址:https://www.cnblogs.com/loyolh/p/12859463.html
Copyright © 2020-2023  润新知