程序设计-----字符串中删除连续空格,只保留一个空格 数中删除连续相同的数,只保留一个数

一、问题描述

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

有一个类似的问题,是将一个数中连续相同的数删除掉,只保留其中一个数,如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)

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

时间: 2024-12-28 11:35:23

程序设计-----字符串中删除连续空格,只保留一个空格 数中删除连续相同的数,只保留一个数的相关文章

“只生一个娃”--设计模式中的单例模式

"只生一个娃"–设计模式中的单例模式(Singleton) 引言 ??被人问到什么是单例模式,突然回答不上来,似乎印象不深了.回去补了一下功课,突然明白了,原来在项目中一直使用的日志模块即采用了单例模式,只是熟视无睹,没有意识到罢了. ??所谓单例模式(Singleton),即指一个类只有一个实例(Instance),并给外界提供访问该实例的一个全局访问点. ??通常我们可以使用全局变量的方式来实现"只生一个娃",但更好的方法就是:让该类自身负责创建和保存它的唯一实

下拉框——把一个select框中选中内容移到另一个select框中遇到的问题

在使用jQuery实现把一个select框中选中内容移到另一个select框中功能时遇到了一个问题,就是点击按钮时内容可以到另一个select框中,但是到了另一个select框中的内容却很快闪退回原来的select框中,代码如下:                  <select class="select1" name="select1" multiple="multiple">                     <op

Path,Files巩固,题目:从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中

这个题目用传统的File,InputStream可以做,但是如果用Files,Path类做,虽然思路上会困难一些,但是代码简洁了很多,以下是代码: import java.io.IOException; import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.Simple

4.产生10个1-100的随机数,并放到一个数组中 (1)把数组中大于等于10的数字放到一个list集合中,并打印到控制台。 (2)把数组中的数字放到当前文件夹的numArr.txt文件中

package cn.it.text; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; /* * 4.产生10个1-100的随机数,并放到一个数组中 (1)把数组中大于等于10的数字放到一个list集合中,并打印到控制台. (2)把数组中的数字放到当前文件夹的number.txt文件中 */ public class Test4 { public static void main

java求字符串中连续的数字为一个整体并返会连续的数字和共有多少个整数

public static void main(String[] args) { String strNumbers = "0123456789";//用来进行判断数字的 System.out.println("请输入一个字符串:"); String string = new Scanner(System.in).next(); //自定义输入 String[] strings = new String[string.length()];//自定义是字符串 Syst

[JavaScript] 处理多余空格,即字符串之间只间隔一个空格

str = 'aaa bb cc dd' str.replace(/\s+/g, " ") // "aaa bb cc dd" 原文地址:https://www.cnblogs.com/frost-yen/p/12573869.html

将一个字符串按分隔符分隔开后存到一个表变量中

DECLARE @t TABLE( id INT )DECLARE @m NVARCHAR(30)='1,9,8'DECLARE @i INT=CHARINDEX(',',@m);WHILE @i!=0 BEGIN PRINT LEFT(@m,@i-1) INSERT INTO @t VALUES(LEFT(@m,@i-1)) SET @m=STUFF(@m,1,@i,''); SET @i=CHARINDEX(',',@m);ENDPRINT @mINSERT INTO @t VALUES(@

程序只启动一个实例的几种方法

我们在使用<金山词霸>时发现,在<金山词霸>已经运行了的情况下,再次点击<金山词霸>的图标,那么它不会再运行另外一个<金山词霸>,而是将已有的<金山词霸>给激活,始终只能运行一个<金山词霸>的实例. 在我们的程序当中如果要实现类似<金山词霸>的功能,就要解决两个问题,首先是要判断该程序已有一个实例在运行,其次是要将已运行的应用程序实例激活,同时退出第二个应用程序实例.  对于第一个问题,我们可以通过设置命名互斥对象或命名信

使用cply移动jfs/jfs2文件系统从一个卷组到另一个卷组中

移动jfs/jfs2文件系统从一个卷组到另一个卷组中的目的是是当一个卷组中的空间越来越少,而另外一个卷组中的空间还比较有富余,我们可以把空间紧张中的卷组移动到空间较多的卷组中: [email protected]:/# uname -MLIBM,9131-52A 2 aix7001 [email protected]:/# lspvhdisk0          0007388ca583b447                    rootvg          active      hdi