程序設計-----字符串中刪除連續空格,只保留一個空格 數中刪除連續相同的數,只保留一個數


一、問題描述

輸入一個字符串,注意是可以帶空格的,我們所要做的是如果字符之間有很多個連續的空格,我們只需要保留一個空格,並輸出顯示。

有一個類似的問題,是將一個數中連續相同的數刪除掉,只保留其中一個數,如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中的第三個參數刪除掉就可以,不適用二元謂詞函數

 

這是這樣做會使程序大大的縮短,但是本質都是一樣的。

綜上,在學習中要多思考類似的問題,可以達到比較好的效果,學習效率也會提高!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM