zoukankan      html  css  js  c++  java
  • 替换空格

    要求:时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 

    题目描述

    请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
     
    编程语言:C++
     
    刚开始,想着用c++自带的函数strtok(以空格作为分隔符,提取出多个子字符串),strcat(再将子字符串给拼接起来)两个函数来完成,结果发现这些函数都是不让用的,啊,原谅我这个刷题的小白吧!!接下来,另谋它路吧。
    记住:字符串是以‘’结尾的,刚开始的时候还一直在纠结,你length= length+2就行了,又没有给分配内存,怎么往里存,熟不知,length是字符串str的长度,但并不代表str的size就这么大。
    一种思路是:从前往后,遇到一个空格,就将后面的字符全部后移2个字符,然后再插入“%20”
    class Solution {
    public:
        void replaceSpace(char *str,int length) {
            if(str == NULL || length < 0)return ;
            for(int i=0;i < length;)
            {
                if(str[i] == ' ')
                {
                    length = length + 2;
                    int j = length -1;
                    while(j > i + 2)
                    {
                        str[j] = str[j-2];
                        j--;
                    }
                    str[i] = '%';
                    str[i+1] = '2';
                    str[i+2] = '0';
                    i = j+1;
                }
                else
                    i++;
            }
        }
    };
    另一种思路是:先计算空格的个数,从后往前插入,这样每个字符只用移动一次即可,既然是倒着插入,那么插入的字符串也就相应的变成了“02%”
    lass Solution {
    public:
        void replaceSpace(char *str,int length) {
            if(str == NULL || length < 0)return;
            int i = 0;
            int oldnumber = 0;//记录以前的长度
            int replacenumber = 0;//空格的数目
            while(str[i] != '')
            {
                oldnumber ++;
                if(str[i] == ' ')
                {
                    replacenumber ++;
                }
                i++;
            }
            int newlength = oldnumber + 2 * replacenumber;//插入后的长度
            if(newlength > length)//如果计算后的长度大于总长度就无法插入,说明无空格,不需要插入
            {
                return ;
            }
            int pOldlength = oldnumber;//字符串以''结尾
            int pNewlength = newlength;
            while(pOldlength >= 0 && pNewlength>pOldlength)
            {
                if(str[pOldlength] == ' ')
                {
                    str[pNewlength--] = '0';
                    str[pNewlength--] = '2';
                    str[pNewlength--] = '%';
                }
                else
                {
                    str[pNewlength--] = str[pOldlength];
                }
                pOldlength--;//不管是if还是else都要把pOldlength前移
            }
        }
    };
  • 相关阅读:
    那些你不知道的项目管理细节(四)—需求阶段的意识
    poj 3253 Fence Repair (STL优先队列)
    “大型票务系统”和“实物电商系统”在不能提供商品(服务)时给消费者带来的影响有巨大差异
    is和as在类型转换时的性能差异
    html5 5个重要特性
    xHTML与HTML的写法有什么不同?
    C++设计模式实现--訪问者(Visitor)模式
    开源,我的一些行动
    自写图片遮罩层放大功能jquery插件源代码,photobox.js 1.0版,不兼容IE6
    03004_SQL语句
  • 原文地址:https://www.cnblogs.com/whiteBear/p/12386380.html
Copyright © 2011-2022 走看看