string的常见用法详解
目錄
- string的定義
- string中內(nèi)容的訪問
- string常用函數(shù)實例解析
在C語言中,一般使用字符數(shù)組char str[]來存放字符串,但是使用字符數(shù)組有時會顯得操作麻煩,而且容易因經(jīng)驗不足而產(chǎn)生一些錯誤。為了使編程者可以更方便地對字符串進行操作, C++在STL中加入了string類型,對字符串常用的需求功能進行了封裝,使得操作起來更方便,且不易出錯。
需要的頭文件:
#include <string> //(注意string.h和string是不一樣的頭文件)需要的其他東西:
using namespace std;string的定義
定義string的方式跟基本數(shù)據(jù)類型相同,只需要在string后面跟上變量名即可:
string str;如果需要初始化,可以直接給string類型的變量進行賦值:
string str="abcd";string中內(nèi)容的訪問
(1)通過下標(biāo)訪問
一般來說,可以直接像字符數(shù)組那樣去訪問string:
如果要讀入和讀出整個字符串,則只能用cin和cout:
由上圖你可以看到,string的輸入的終止讀取符也是空格,這和 scanf()對字符數(shù)組的讀取效果是一樣的。
上面的代碼對任意的字符串輸入,都會輸出同樣的字符串。
那么,真的沒有辦法用printf來輸出string么? 其實是有的,即用 c_str()將string類型轉(zhuǎn)換為字符數(shù)組進行輸出,
例如:
(2)通過迭代器訪問
一般僅通過(1)即可滿足訪問的要求,但是有些函數(shù)比如insert()與erase()則要求以迭代器為參數(shù),
因此還是需要學(xué)習(xí)一下string迭代器的用法。
由于string不像其他的容器那樣需要參數(shù),因此可以直接如下定義:
string::iterator it;這樣就得到了迭代器 it ,并可以通過 *it來訪問string里的每一位:
最后指出,string 和 vector一樣,支持直接對迭代器進行加減某個數(shù)字,如str.begin()+3的寫法是可行的。
string常用函數(shù)實例解析
(1) operator+=
這是string的加法,可以將兩個string直接拼接起來。
(2) compare operator
兩個string類型可以直接使用==、!=、<、<=、>、>=比較大小,比較規(guī)則是字典序。
例子:
(3) length() / size()
length()返回string的長度,即存放的字符數(shù),時間復(fù)雜度為O(1)。size()與length()基本相同。
(4) insert()
string的insert()函數(shù)有很多寫法,這里給出幾個常用的寫法,時間復(fù)雜度為O(N)。
①insert(pos,string) , 在pos號位置插入字符串string。
②insert( it , it2 , it3 ), it為原字符串的欲插入位置,it2和 it3 為待插字符串的首部迭代器,用來表示串 [ it2, it3)
將被插在it的位置上。
(5)erase()
erase()有兩種方法: 刪除單個元素、刪除一個區(qū)間內(nèi)的所有元素。時間復(fù)雜度為O(N)
①刪除單個元素
str.erase(it) ,用于刪除單個元素,it為需要刪除元素的迭代器。
②刪除一個區(qū)間內(nèi)的所有元素
刪除一個區(qū)間內(nèi)的所有元素有兩種方法:
str.erase(first,last),其中first為所需刪除區(qū)間的起始迭代器,而last則為所需要刪除區(qū)間的末尾迭代器的下一個地址,
即刪除 [ first , last) 內(nèi)的所有元素。
str.erase(pos , length) , 其中pos為需要開始刪除的起始位置,length為刪除的字符個數(shù)。
(6)clear()
clear()用以清空string中的數(shù)據(jù),時間復(fù)雜度一般為O(1)。
(7)substr()
substr(pos,len)返回從pos號位開始,長度為len的子串,時間復(fù)雜度為O(len)
(8)string:npos
string:npos是一個常數(shù),其本身的值為-1,但由于是unsigned int類型,因此實際上也可以認(rèn)為是unsigned int類型的最大值。
string:npos用以作為find函數(shù)失配時的返回值。例如在下面的實例中可以認(rèn)為string::npos等于-1或者4294967295.
(9)find()
str.find(str2),當(dāng)str2是str的字串時,返回其中在str中第一次出現(xiàn)的位置:
如果str2不是str的子串,那么返回string::npos。
str.find(str2,pos),從str的pos號位開始匹配str2,返回值與上相同。
時間復(fù)雜度為O(nm),其中n和m分別為str和str2的長度。
(10)replace()
str.replace(pos,len,str2)
把str從pos號位開始、長度為len的子串替換為str2。
str.replace(it1,it2,str2)把str的迭代器[it1,it2)范圍內(nèi)的子串替換為str2。
總結(jié)
以上是生活随笔為你收集整理的string的常见用法详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: set的相关习题
- 下一篇: queue的常见用法详解