zoukankan      html  css  js  c++  java
  • 程序设计-----字符串中删除连续空格,只保留一个空格 数中删除连续相同的数,只保留一个数

    一、问题描述

    输入一个字符串,注意是可以带空格的,我们所要做的是如果字符之间有很多个连续的空格,我们只需要保留一个空格,并输出显示。

    有一个类似的问题,是将一个数中连续相同的数删除掉,只保留其中一个数,如3456667,转化为34567。这个问题与字符串的问题大体上是一致的,

    只是字符串限定了只有连续的空格需要处理,连续的其他字符是可以接受的,如abbbc是满足条件的,而a    bbb     ccc则要转换为a bbb ccc.

    二、问题分析

    在书写程序的过程中,首先的思路是以空间换取时间,使得该问题的时间复杂度为线性复杂度O(n)。

    先用一个字符数组b存取字符串a的第一个元素,然后依次比较b中的最后一个元素与a中的下一个元素。

    如果两者不同,很明显把a中的这个元素加入b数组;

    如果两者相同,但是不是空格,则也满足条件,把a中的这个元素加入数组;

    其余的条件就是两者相同,但是都是空格,为了避免出现连续的空格,所以不加入这个元素;

    下面将举个简单的例子:字符串1 :ab    cd    edd;数组2第一个元素设为字符串1的第一个元素a;

    开始比较字符串下一个元素b和数组2最后一个元素a,发现满足,即数组2变成ab;接着比较字符串的空格与数组2的最后一个元素b,发现不相等,继续加入;

    数组2变成ab .然后发现字符串的下一个元素还是空格,与数组2的最后一个元素是相同的,舍弃;依次类推,我们便可以得到ab cd edd这个结果。

    如果是要删除数中连续相同的数,保留一个,那么做法类似,甚至更简单,直接比较是否相等,相等舍弃,不等加入。

    三、程序设计

    (1)字符串删除连续空格,保留一个空格的程序:

    其中需要注意的是getline函数,之前无脑直接采用cin,忽略了cin是以空格为结束符,所以根本读取不了,直接在输入就错误了;

    getline则可以实现输入含有空格的各种字符串;

    (2)删除数中连续相同的数,保留一个数

    四、程序结果

    (1)

    (2)

    五、利用C++现成的算法库实现

    (1)字符串删除连续空格,保留一个空格的程序:

    (2)删除数中连续相同的数,保留一个数:

    只需将unique中的第三个参数删除掉就可以,不适用二元谓词函数

    这是这样做会使程序大大的缩短,但是本质都是一样的。

    综上,在学习中要多思考类似的问题,可以达到比较好的效果,学习效率也会提高!

  • 相关阅读:
    extern--C#调用C++等其他非托管代码
    unhandledException详细介绍
    MySql如何安装?
    Mindoc搭建流程
    反射_IsDefined判断方法上有自定义的标签
    WebApi_返回Post格式数据
    编码
    IP地址与MAC地址
    Tcp/Ip:Telnet指令
    create-react-app使用的问题
  • 原文地址:https://www.cnblogs.com/cxmhy/p/4480394.html
Copyright © 2011-2022 走看看