cds 字元串的基本運用 string(字元串)是c++中一種相當方便的數據類型,他由很多的字元組成,和 char 比較起來,他不必擔心記憶體是否足夠,而既然他自成一個類型,它的使用範圍很廣操作體系也是相當全面的。正是因為他既簡單又實用,所以他深受喜愛!由此,他也誕生出了很多經典高效的演算法,比如說AC ...
cds
字元串的基本運用
string(字元串)是c++中一種相當方便的數據類型,他由很多的字元組成,和 char 比較起來,他不必擔心記憶體是否足夠,而既然他自成一個類型,它的使用範圍很廣操作體系也是相當全面的。正是因為他既簡單又實用,所以他深受喜愛!由此,他也誕生出了很多經典高效的演算法,比如說AC自動機演算法,迴文自動機,尾碼自動機等等等,對了,還有十分經典的KMP演算法(也被我的老師稱作 看毛片 演算法)當然這裡就不多贅述了,這裡我們主要介紹一下字元串的
基本運用
好了,廢話不多說,進入正題......
(弱弱的說一句,本人只是個c++新手,發表內容僅代表自己觀點,有錯誤的話,大佬們可以在評論區指出,請大佬勿噴,謝謝!!!)
字元串的聲明(定義)
想要使用他,就要先定義他,怎麼定義呢?
很簡單——string s;即可,這樣我們就聲明瞭一個字元串變數,但既然是一個類,就有構造函數和析構函數。上面的聲明沒有傳入參數,所以就直接使用了string的預設的構造函數,這個函數所作的就是把Str初始化為一個空字元串,所以這個字元串的初始為"";下麵就來介紹一下比較常見的構造和析構函數
1. string s//定義一個空字元串
2.string s(str)//拷貝構造函數 生成str的複製品
3.string s(str,x) //將字元串str內“始於位置x(不包括x本身)”的部分當作字元串的初值,註意,x是 char 類型的,如果str中沒有x所表示的字元,那麼效 果會同 2. 一樣
4.string s(chars,len) //將C字元串前len個字元作為字元串s的初值
5.string s(num,x) //生成一個字元串,包含num個x字元,其中x為 char 類型
6.s.~string() //銷毀所有字元,釋放記憶體(其實吧,s="";好像更快一點)
都比較簡單,大家可以自行嘗試~
字元串的基本操作
這裡的內容就真的非常簡單了,不得不說,他真的是太方便了!
先聲明兩個字元串——string a,b;
然後就可以為所欲為了~~
1.賦值 a=b,沒了,是不是比char 簡單多了?當然,也可以直接賦值一段你要的字元,比如a="DuanXinJing I love you"之類的,用雙引號作用一下即可
2.比較大小 直接啊a>b或a<b,對,你沒看錯,就是這麼簡單!(使用預設比較大小,優先考慮逐位進行ASK比較,若一方為另一方的首碼,則長者大)
3.拼接 把a接在b後,b+=a 即可,也是相當的方便啊!
4.輸入 輸入的話有很多種方法,我這裡就不多介紹了,只介紹最基本的幾乎也是最實用的
a) cin>>a;這樣的話可以讀入字元串a,但有個問題,這樣會在遇到空格時停止讀入,如果需要空格一起讀入的話,可採用下麵一種
b) getline(cin,a),這樣的話就可以把空格一起讀入了(如果碰到沒有輸出的情況下,是因為getline會把換行也讀入,所以會出現讀不完的情況,只要再把你想讀的輸進去之後再加一個 Ctrl+z 就行了
5.輸出 直接就是 cout<<a 就是了,不整那些花里胡哨的!!!
看到這裡,說明你已經初步瞭解了 字元串(string) 這玩意兒,已經懂得怎麼運用了
有了上述的知識,我們已經可以快速地解決很多有關問題了,但是如果想要更方便的話,那麼有關字元串的函數知識也是不可忽視的!接下來我們就來講講有關字元串的簡單常用的函數
字元串常用函數
1. swap() //交換兩個字元串的內容
2. push_back() //在尾部添加字元(這個我怕一般不用,感覺沒啥用)
3. insert() //插入字元
4. erase() //刪除字元
5. clear() //刪除全部字元
6. size(),length() //返回字元數量
7. empty() //判斷字元串是否為空(這個似乎沒什麼用,有了 6. 就行了)
8. substr() //返回某個子字元串
9. replace() //替換字元
10. find()//查找某個位置
好了,我認為最常用的幾個函數就在這裡了,相信大家看到這裡應該都會使用這些函數了吧!
(一般是不太可能的,寫成這樣鬼才看得懂啊!!!)
哎,沒辦法,誰叫我人美心善呢?我只能耗費我寶貴的時間去給大家貼一點簡單的代碼了
ok,上乾貨!
1 //!!乾貨 !!
2 #include<bits/stdc++.h>
3 using namespace std;
4 string a,b;
5 int main()
6 {
7 int num,x;
8 swap(a,b);//相當於交換a,b位置
9
10 a.push_back('c');//把'c'接在a後面,接字元
11
12 a.insert(x,b);//在a中的第num個字元後插入b,如:
13 //a="1234",b="abcd";
14 //a.insert(0,b);
15 //則 a為 abcd1234;
16
17 a.erase(x,num);//在a中,從第x個字元(不包括第x個)往後刪num個字元;
18 //也可以直接這樣:a.erase(x),相當於刪掉x後面的所有;
19 a.clear();//刪掉所有字元;
20
21 // a.size(),a.length()都是數字,可以直接使用,除此之外,size()還可以獲取vector等類型的長度
22
23 // a.empty()判斷是否為空
24
25 a.substr(x,num);//用法與insert()類似,這裡不多解釋了
26
27 a.replace(x,num,b);//將a中第x個字元往後的三個字元替換成b;
28
29 x=a.find(b);//在a中找b,並返回b在a中第一次出現的首字元的下標,註意!!!是下標!!!
30 //c++標準沒有規定string的複雜度(一般其它容器都規定),
31 //流行的實現都是沒有使用KMP的,而採用了簡單的匹配演算法,最壞複雜度O(M*N),
32 //但對於隨機字元串均攤還是O(M+N)的,
33 //而且繫數相對於KMP要更小,也不需要額外空間,在實際應用中還是適合的
34 return 0;
35 }
到這裡,如果大家能認真看完上述內容的話,相信大家對字元串有了比較清晰的認識和瞭解,不說基本操作,有關的函數也是很重要的,希望大家可以掌握(當然,如果你是一個能手敲實現這些函數的巨佬,那就當我沒有說)!我自認為寫的還是比較清晰的,如果還是有地方不太理解,可以將代碼複製一下自己試試看,畢竟,實踐才是檢驗真理的唯一標準嘛!這裡只是介紹了少數內容,關與字元串還有很多很多知識,感興趣的同學可以自行查閱學習
那不做題目怎麼可以提升實戰技巧啊,說得好!
所以最後,貼心的我又為大家找了幾個我覺得比較好的練題網址,有需要的讀者可以訪問
1.洛谷 【入門5】字元串 - 題單 - 洛谷 | 電腦科學教育新生態 (luogu.com.cn)
2. 競碼編程 競碼編程 (hzjingma.com)
至此,我們的內容就到此結束了,感謝大家觀看,那既然都看到這裡了.......
みんな(大家),打字不易,能不能占用您寶貴的時間動動您尊貴的手指點個贊吧~感謝大家支持!!