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)
至此,我們的內容就到此結束了,感謝大家觀看,那既然都看到這里了.......

みんな(大家),打字不易,能不能占用您寶貴的時間動動您尊貴的手指點個贊吧~感謝大家支持!!

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/501874.html
標籤:C++
上一篇:15:銀行利息
