面试题2:替换空格

php中文网
发布: 2016-06-07 15:17:59
原创
980人浏览过

来源:《剑指offer》 题目:请实现一个函数,把字符串的每个空格替换成”%20”,原字符串后面有足够的空间,要求在原字符串上操作。例如输入”we are happy”,则输出”we%20are%20happy”。 分析:先遍历一遍统计出空格数,一个空格替换成三个字符,长度增

来源:《剑指offer》

题目:请实现一个函数,把字符串的每个空格替换成”%20”,原字符串后面有足够的空间,要求在原字符串上操作。例如输入”we are happy”,则输出”we%20are%20happy”。

分析:先遍历一遍统计出空格数,一个空格替换成三个字符,长度增加了2,N个空格,长度增加2N。则
替换后的字符串长度 = 原字符串长度 + 2N
设置两个指针,一个指向原字符串末尾,一个指向新字符串末尾。第二遍遍历,从后往前遍历。将原字符串最后一个字符复制到新字符串最后一个字符的位置,两个指针同时前移。当原字符串遇到空格,在新字符串对应位置插入”%20”三个字符,接着原字符串指针前移1位,新字符串指针前移3位。如此操作,直到原字符串第一个字符也复制完结束。

代码(C++):

<span>#include<iostream></span>
<span>using</span> <span>namespace</span> <span>std</span>;

<span>#define MAX_LEN 100</span>

<span>/*
    函数功能:替换字符串中的空格
  */</span>
<span>void</span> replaceBlank(<span>char</span> data[])
{
    <span>int</span> i=<span>0</span>,j;
    <span>int</span> old_len;
    <span>int</span> new_len;
    <span>int</span> blank_num=<span>0</span>;
    <span>// 遍历一遍,找出空格数</span>
    <span>while</span>(data[i]!=<span>'\0'</span>)
    {
        <span>if</span>(data[i]==<span>' '</span>)
        {
            blank_num++;
        }
        i++;
    }
    <span>//-----------这里是关键------------</span>

    <span>// 原来字符串长度</span>
    old_len=i+<span>1</span>;
    <span>// 计算新字符串长度</span>
    new_len=old_len+<span>2</span>*blank_num;
    <span>// 重置i,j</span>
    i=old_len-<span>1</span>;
    j=new_len - <span>1</span>;

    <span>//-----------这里是关键------------</span>


    <span>// 再遍历一遍,替换空格</span>
    <span>while</span>(i>=<span>0</span>)
    {
        <span>if</span>(data[i]!=<span>' '</span>)
        {
            data[j]=data[i];        
            j--;
        }
        <span>else</span>
        {
            data[j]=<span>'0'</span>;
            data[j-<span>1</span>]=<span>'2'</span>;
            data[j-<span>2</span>]=<span>'%'</span>;
            j-=<span>3</span>;
        }
        i--;
    }

}
<span>int</span> main()
{
    <span>char</span> str[MAX_LEN];<span>// 声明一个字符数组</span>

    <span>// 输入数组</span>
    <span>cout</span><<<span>"请输入一个字符串,不超过20个字符"</span><<endl;
    gets(str);
    <span>// 替换</span>
    replaceBlank(str);
    <span>// 打印</span>
    <span>cout</span><<str<<endl;
    <span>return</span> <span>0</span>;
}

登录后复制
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号