這是之前做pat乙級1029舊鍵盤時遇到的乙個問題,大概就是我現在得到了乙個字串,但是其中相同的字元只需要輸出一次,我當時沒能想出好的解決辦法,就在網上覆制了一段**,但是發現那個刪除重複字元的**也沒看懂。直到今天看到了乙個刪除字串中給定的字元的**,一步步執行下就理解了。
先貼下我複製的**:
void
main()
printf
("%s"
,s);
}
**太過精簡,當時又沒有時間一步步執行,就沒有懂得這個演算法是如何實現的。
兩層for迴圈,第二層實際上是進行刪除s[j]元素的操作,第一層遍歷陣列。於是程式實際上就是遍歷陣列,看當前元素是否能在之後找到重複元素,能找到就刪去重複的元素。而巧妙的就是這個刪除陣列指定元素的實現。
**:
void
delete_char
(char str[
],char target)
} str[j]
='\0'
;}
這是今天發現的刪除陣列中字元的函式,跟上面的內層for迴圈其實是完全一樣的。下面談談這個函式是怎麼實現的。
下標i
用於遍歷陣列,下標j
用於記錄找到的將要刪除的字元。
如果還沒有找到該字元,i
和j
將會一起遞增,所以賦值語句相當於沒有執行。而當找到了該字元,即if語句中的條件不滿足,j
就不會遞增,而i
會接著遞增。此時j指向將要刪除的元素,i
指向後面的元素,如果i
指向的元素不是將要刪除的,將把i
指向的元素複製給j
指向的元素,就相當於被刪除的元素被後面的元素覆蓋了。而隨著i j
的遞增,陣列遍歷完後所有不會被刪除的元素都會向前移動,覆蓋被刪除的元素。i
與j
的差值就表示共找到幾個刪除的元素。
最後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,原來正確答案...