所在頭文件:
實(shí)現(xiàn):typedf basic_string
所在命名空間:std
功能:標(biāo)準(zhǔn)string提供字節(jié)標(biāo)準(zhǔn)容器的接口,同事增加對(duì)字符串中單獨(dú)的字符的操作。由于標(biāo)準(zhǔn)string是basic_string
(1)成員函數(shù)number functions
constructor(構(gòu)造函數(shù)) | 創(chuàng)建string對(duì)象 (公有成員函數(shù)) |
destructor (析構(gòu)函數(shù)) | 銷毀string對(duì)象(公有成員函數(shù)) |
operator= (賦值運(yùn)算符重載) | 將一個(gè)string對(duì)象賦給另一個(gè)string對(duì)象 (公有成員函數(shù)) |
(2)Iterators
begin | iterator begin(); const_iterator begin() const; | 返回一個(gè)迭代器指向string對(duì)象的第一個(gè)字符 |
end | iterator end() noexcept; const_iterator end() const noexcept; (noexcept是c11對(duì)異常的處理方式) | 返回一個(gè)迭代器指向string對(duì)象的結(jié)束字符的位置(‘\0’處),不可引用 如果是空串end=begin |
rbegin | reverse_iterator rbegin() noexcept; const_reverse_iterator rbegin() const noexcept; | 返回一個(gè)反向迭代器指向string對(duì)象的結(jié)束字符的位置 反向迭代器向后遍歷-->向begin走 |
rend | reverse_iterator rend() noexcept; const_reverse_iterator rend() const noexcept; | 返回一個(gè)反向迭代器指向string對(duì)象的第一個(gè)字符的位置 |
cbegin | const_iterator cbegin() const noexcept; | 返回一個(gè)const迭代器指向string對(duì)象的第一個(gè)字符的位置 |
cend | const_iterator cend() const noexcept; | 返回一個(gè)const迭代器指向string對(duì)象的結(jié)束字符的位置 |
crbegin | const_reverse_iterator crbegin() const noexcept; | 返回一個(gè)const反向迭代器指向string對(duì)象的結(jié)束字符的位置 |
crend | const_reverse_iterator crend() const noexcept; | 返回一個(gè)const反向迭代器指向string對(duì)象的第一個(gè)字符的位置 |
例子:
// string::begin/end #include#include using namespace std: void test1() { string str ("Test string"); for(string::iterator it=str.begin(); it!=str.end(); ++it) { cout << *it; } cout < (3)Capacity
size size_t size() const noexcept; 返回string的字節(jié)個(gè)數(shù)(size_t類型)
size!=capacity
length size_t length() const noexcept; 返回string的字節(jié)個(gè)數(shù)(size_t類型)
length!=capacity
max_size size_t max_size() const noexcept; 返回string可以達(dá)到的大長(zhǎng)度
(極限范圍,可能按max_size內(nèi)存分配失?。?/p>
max_size!=capacity
resize void resize (size_t n);
void resize (size_t n, char c);重置string的長(zhǎng)度,設(shè)置為n
重置string的長(zhǎng)度,設(shè)置為n,內(nèi)容用c填充
如果n
如果n>string的原length,先拷貝原先的在加上
c的部分(沒(méi)有c,就是空字符)
capacity size_t capacity() const noexcept; 返回已分配給string的內(nèi)存的字節(jié)個(gè)數(shù) reverse void reserve (size_t n = 0); 改變string的capacity為n
不改變length和內(nèi)容
clear void clear() noexcept; 清除string的內(nèi)容,讓string變成一個(gè)空串
length=0
empty bool empty() const noexcept; 返回string是否為空,為空返回true,非空返回
false
shrink_to_fit void shrink_to_fit(); 減小string的capacity到size大小 例子:
#include#include using namespace std; // comparing size, length, capacity and max_size void test1 () { string str ("Test string"); cout <<"size: "<< str.size() < (4)Element access
operator[] char& operator[] (size_t pos);
const char& operator[] (size_t pos) const;返回string[pos]的字符 at char& at (size_t pos);
const char& at (size_t pos) const;返回string[pop]的字符前會(huì)檢查pos是不是字符范圍內(nèi),超出范圍會(huì)拋異常 back char& back();
const char& back() const;返回最后一個(gè)字符的引用 front char& front();
const char& front() const;返回第一個(gè)字符的引用 例子:
#include#include using namespace std; //string::operator[] void test1() { string str ("Test string"); for(int i=0; i (5)Modifiers
operator+= string& operator+= (const string& str);
string& operator+= (const char* s);
string& operator+= (char n);
string& operator+= (initializer_list
il); 在現(xiàn)有的string后面添加字符串/字符 append string& append (const string& str);
string& append (const string& str, size_t subpos, size_t sublen);
string& append (const char* s);
string& append (const char* s, size_t n);
string& append (size_t n, char c);
template
string& append (InputIterator first, InputIterator last);string& append (initializer_list
il); 在現(xiàn)有的string后面添加字符串/字符 push_back void push_back(char c); 將字符c添加在string末尾,length++ assign string& assign(const string& str);
string& assign(const string& str, size_t subpos, size_t sublen);
string& assign(const char * s);
string& assign(const char *s,size_t n);
string &assign(size_t n,char c);
template
string& assign(InputIterator first,InputIterator last);
string& assign(initializer_list
il); 將現(xiàn)有的字符串string替換成新的字符串 insert string & insert (size_t pos,const string & str );
string & insert (size_t pos,const string & str,size_t subpos,size_t sublen);
string & insert(size_t pos,const char *s);
string & insert(size_t pos,const char *s,size_t n);
string & insert(size_t pos,size_t n,char c);
void insert (iterator p, size_t n, char c);
iterator insert (iterator p, char c);
template
void insert (iterator p, InputIterator first, InputIterator last);將現(xiàn)有字符串string的pos位置后面插入字符串或者字符 erase string & erase(size_t pos=o,size_t len=pos);
iterator erase(iterator p);
iterator erase(iterator first,iterator last);
將現(xiàn)有字符串刪除一部分,length也有減少 replace string & repalce(size_t pos,size_t len,const string& str);
string & repalce(iterator i1,iterator i2,const string &str);
string & repalce (size_t pos,size_t len,const string & str,size_t subpos,size_t sublen);
string & replace(size_t pos,size_t len,const char *s);
string & replace(iterator i1,iterator i2,const char *s);
string & repalce(size_t pos,size_t len,const char*s,size_t n);
string & repalce(iterator i1,iterator i2,const char*s,size_t n);
string & raplace(size_t pos,size_t len,size_t n,char c);
string & repalce(iterator i1,iterator i2,size_t n,chr c);
template
string & repalce(iterator i1, iterator i2,InputIterator first,InputIterator last);
將現(xiàn)有字符串的一部分用新的字符串或者字符序列,字符去替換 swap void swap(string & str); 兩個(gè)字符串的內(nèi)容進(jìn)行交換 pop_back void pop_back();
將字符串末尾的字符刪除 例子:
#include#include using namespace std; // string::operator+= void test1() { string name ("John"); string family ("Smith"); name +=" K. "; // c-string name += family; // string name +='\n'; // character cout << name; } //string::append void test2() { string str; string str2="Writing "; string str3="print 10 and then 5 more"; //string& append(const string &str); str.append(str2); //Writing //string& append(const string &str,size_t pos,size_t length); str.append(str3,6,3);//Writing 10 //string& append(const char* s,size_t n); str.append("dots are cool",5);//Writing 10 dots //string& append(const char *s); str.append("here: ");//Writing 10 dots here: //string& append(size_t n,char c); str.append(10u,'.');//Writing 10 dots here: .......... //strin& append(inputIterator first,inputIterator last); str.append(str3.begin()+8,str3.end()); //Writing 10 dots here:......... and then 5 more //string& append(size_t n,) str.append (5,0x2E); //Writing 10 dots here:......... and then 5 more..... cout << str < (10,0x2D); cout << str < (6)String operations
c_str const char * c_str()const; 返回一個(gè)const char *型的指針,內(nèi)容是string的內(nèi)容+‘\0’ data const char * data()const; 返回一個(gè)const char *型的指針,即得到string對(duì)象的c_string形式 get_allocator
allocator_type get_allocator()const; 返回一個(gè)allocator——type型的string的拷貝 copy size_t copy(char*s,size_t len,size_t pos=0)const; 拷貝一個(gè)string中的子串到s所指的數(shù)組
(拷貝版不會(huì)自己添加'\0')
find size_t find(cosnt string &str,size_t pos=0)const;
size_t find(const char *s,size_t pos=0)const;
size_t find(const char *s,size_t pos,size_t n)const;
size_t find(char c,size_t pos=0)const;
查找所找字符串序列第一次出現(xiàn)的位置 substr string substr(size_t pos=0,size_t len=npos)const;
返回子串 compare int compare(const string& str)const;
int compare(size_t pos,size_t len,const string &str)const;
int compare(size_t pos,size_t len,const string &str,size_t subpos,size_t
sublen)const;
int compare(const char* s)const;
int compare(size_t pos,size_t len,const char *s)const;
int compare(size_t pos,size_tlen,const char *s,size_t n)const;
比較兩個(gè)字符串 例子:
#include#include using namespace std; //string::c_str() void test1() { string str ("Please split this sentence into tokens"); char* cstr =newchar[str.length()+1]; strcpy (cstr, str.c_str()); // cstr now contains a c-string copy of str char* p = strtok (cstr," "); //線程不安全的字符串分割函數(shù) while(p!=0) { cout << p < (7)成員常量
npos size_t的大范圍
static const int npos=-1;
(定義時(shí)就初始化)
(8)非成員函數(shù)的重載
operator+ 串聯(lián)字符串 relational operator 各種運(yùn)算符的重載
swap 交換兩個(gè)字符串,std所屬函數(shù),非string所屬
operator>>
輸入一個(gè)字符串
operator<< 輸出一個(gè)字符串
getline 將輸入的數(shù)據(jù)is傳入到str字符串中,遇到定界符delim時(shí)停止
將輸入的數(shù)據(jù)is傳入到str字符串中,到文件結(jié)束
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
分享題目:解讀STL的string類中各方法的使用場(chǎng)景-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)路徑:http://weahome.cn/article/gosjj.html