DS 字串操作

2021-09-28 18:44:26 字數 1673 閱讀 7071

本週資料結構講了字串

作業不是很難,只寫了一中午

主要是利用製表的思路減少遍歷次數

要讓演算法有記憶?

刪除s中所有ch

編寫效率盡量高的函式刪除s中所有值為ch的字元

#include

#include

using namespace std;

void

del(

char

*s,char ch)

,i=0

,j=0

,n=0

;while(*

(s+i)

!='\0'

) i++;}

//preparation:record the same ch

if(n==0)

return

;//no need to delete

i=0;

while

(num[i]==0

) i++

;//locate the first ch

j=i;i++

;n--

;while

(n>0)

else

}//delete ch

while(*

(s+i)

!='\0'

)//add the tail

*(s+j)

='\0';}

intmain()

cout<}

以後都要像這樣加上注釋呀!!

思路:製表,所有ch字元在**裡的對應位置為1,其餘為0

找到第乙個1的位置開始,跳過ch字元修改字串

最後再加上剩餘部分完成刪除

要注意在string中,自行加入』\0』並不會讓其停止輸出

2019.11.17

複習ds期中的時候再回頭看這題,想到的方法如下:

已知ch的情況下,用第乙個陣列記錄ch的位置(與上面不同,直接記錄下標),再用乙個陣列記錄不用刪除的字元的位置(需要對第乙個陣列進行第二次遍歷,取不在其中的下標),然後直接開陣列或用原陣列,把第二個陣列中的字元依次複製一下即可,最後加上\0

是next陣列給的靈感呢hhh

字串中第一次只出現一次的字元

編寫函式用盡量快的速度在字串str中找到第乙個只出現一次的字元

限定str只有英文小寫字母

#include

#include

using namespace std;

char

firstsingle

(char

*str)

;while(*

(str+i)

!='\0'

) i=0;

while(*

(str+i)

!='\0'

)return

'0';

}int

main()

第一反應就是製表,充分利用ascii碼

對應陣列裡是該字母出現的次數,再循字串遍歷直到找到值為1的那個字母,否則返回0

這章主要是對演算法思路的把握和學習

bomblab要加油呀!!

DS 字串迴圈問題

題目描述 給定乙個字串,求需要新增至少幾個字元到字串末尾才能使得整個字串串由某乙個不為本身的子串迴圈構成?如 abca 新增 bc 後構成 abcabc 其由子串 abc 迴圈構成 也可以新增 abca 後構成 abcaabca 其由子串 abca 迴圈構成,相比之下 bc 只有2個字元,新增的字元...

DS 鍊錶 字串演算法設計

第五周上機課開始限時模式 規定了鍊錶用struct 之前沒有接觸過struct的函式所以摸索了好久 不過好歹是在課上寫出來了第一題 第二題回來思考了一下也寫出來了,應該是o n 複雜度 刪除鍊錶中的重複元素並排序 給定乙個排序鍊錶,刪除所有含有重複數字的節點,只保留原始鍊錶中 沒有重複出現 的數字。...

字串操作 靠字串分割字串

字串分解函式。注意strtok比較複雜。要妥善運用!也可以不用strtok函式,但要實現字串靠字串分割比較困難!注意str指向的空間必須是可讀可寫的 如陣列或動態分配的空間 不能為字串常量的指標,因為strtok改變了其中的內容。include include 功能 將str中的字串按照elemon...