c語言 刪除字串中相同的字元

2021-10-25 04:21:37 字數 1085 閱讀 4138

這是之前做pat乙級1029舊鍵盤時遇到的乙個問題,大概就是我現在得到了乙個字串,但是其中相同的字元只需要輸出一次,我當時沒能想出好的解決辦法,就在網上覆制了一段**,但是發現那個刪除重複字元的**也沒看懂。直到今天看到了乙個刪除字串中給定的字元的**,一步步執行下就理解了。

先貼下我複製的**:

void

main()

printf

("%s"

,s);

}

**太過精簡,當時又沒有時間一步步執行,就沒有懂得這個演算法是如何實現的。

兩層for迴圈,第二層實際上是進行刪除s[j]元素的操作,第一層遍歷陣列。於是程式實際上就是遍歷陣列,看當前元素是否能在之後找到重複元素,能找到就刪去重複的元素。而巧妙的就是這個刪除陣列指定元素的實現。

**:

void

delete_char

(char str[

],char target)

} str[j]

='\0'

;}

這是今天發現的刪除陣列中字元的函式,跟上面的內層for迴圈其實是完全一樣的。下面談談這個函式是怎麼實現的。

下標i用於遍歷陣列,下標j用於記錄找到的將要刪除的字元。

如果還沒有找到該字元,ij將會一起遞增,所以賦值語句相當於沒有執行。而當找到了該字元,即if語句中的條件不滿足,j就不會遞增,而i會接著遞增。此時j指向將要刪除的元素,i指向後面的元素,如果i指向的元素不是將要刪除的,將把i指向的元素複製給j指向的元素,就相當於被刪除的元素被後面的元素覆蓋了。而隨著i j的遞增,陣列遍歷完後所有不會被刪除的元素都會向前移動,覆蓋被刪除的元素。ij的差值就表示共找到幾個刪除的元素。

最後j指向處理好的陣列的末尾,加上結束符,程式結束。

C 刪除字串中特定的字元

原文 處理string型別的方法del sp string str 待測試 處理c style的方法可用,可以考慮將該方法改寫為void del ch char src char ch 使其更加通用化。include include using namespace std void del sp c...

c 字串中刪除指定的字元

string沒有直接的刪除指定字元的方法,可以利用find和erase或者substr實現。string str string target int pos str.find target n target.size str str.erase pos,n 若包含多個特定字元,則迴圈刪除即可。注意f...

字串中相同且長度最長的字串

題目出自 程式設計師面試寶典 第三版 p226頁 面試例題2 輸入一行字串,找出其中出現的相同且長度最長的字串,輸出它及首字元的位置。例如 yyabcdabjcabceg 輸出結果應該為abc和3。這個題目存在乙個歧義,例如如果測試字串為aaaaaa,我一開始以為結果是長度為3的aaa,原來正確答案...