string是C標準模板庫中專門用於字元串處理的數據結構類型。它並不是 C的基本數據類型,它是 C++標準模板庫中的一個“類”。若要使用 string 對象,則必須包含頭文件#include <string>。 初始化 常用的初始化有以下幾種,帶等號的是拷貝初始化, string str1("hel ...
string是C++標準模板庫中專門用於字元串處理的數據結構類型。它並不是 C++的基本數據類型,它是 C++標準模板庫中的一個“類”。若要使用 string 對象,則必須包含頭文件#include <string>。
- 初始化
常用的初始化有以下幾種,帶等號的是拷貝初始化,
string str1("hello world"); // hello world
string str2 = "hello world"; // hello world
string str3(str2); // hello world
string str4 = str3; // hello world
string str5(5,'d'); // ddddd
string str6(str2, 6); // world,從str2的第6個字元開始到結束,拷貝到str6中
string str7(str2, 0, 5); // hello, 從str2的第0個字元開始拷貝5個字元到str7中
char buff[] = "hello sorld";
string str8(buff, 5); // hello, 拷貝buff的前5個字元到str8中
特殊數據結構成員
static const size_t npos = -1;
- string 的基本操作
- 長度
size_t length() const noexcept; // 得到字元串的長度
size_t size() const noexcept; // 得到字元串的長度
size_t max_size() const noexcept; // 得到字元串可以達到的最大長度
- 插入
在指定的位置後面插入一個字元串
// 在pos後面插入字元串str
string& insert (size_t pos, const string& str);
// 在pos後面插入str的subpos處往後的sublen長度的字元串
string& insert (size_t pos, const string& str, size_t subpos, size_t sublen);
// 在pos後面插入字元數組s
string& insert (size_t pos, const char* s);
// 在pos後面插入字元數組s的前n個字元
string& insert (size_t pos, const char* s, size_t n);
// 在pos後面插入n個字元c
string& insert (size_t pos, size_t n, char c);
// 在p後面插入n個字元c
iterator insert (const_iterator p, size_t n, char c);
// 在p後面插入一個字元c
iterator insert (const_iterator p, char c);
// 在p後面插入迭代器first到last之間的字元串
template <class InputIterator>
iterator insert (iterator p, InputIterator first, InputIterator last);
// 在p後面插入il內的所有字元
string& insert (const_iterator p, initializer_list<char> il);
- 替換
把指定的位置後指定長度的字元串替換成另一個字元串
// 把pos後面len長度的字元串替換成str
string& replace (size_t pos, size_t len, const string& str);
// 把i1和i2之間的內容替換成str
string& replace (const_iterator i1, const_iterator i2, const string& str);
// 把pos後面len長度的字元串替換成字元串str的subpos後面的sublen個長度的字元串
string& replace (size_t pos, size_t len, const string& str, size_t subpos, size_t sublen);
// 把pos後面len長度的字元串替換成字元數組s里的所有內容
string& replace (size_t pos, size_t len, const char* s);
// 把i1和i2之間的字元串替換成數組s里的所有內容
string& replace (const_iterator i1, const_iterator i2, const char* s);
// 把pos後面len長度的字元串替換成字元數組s裡面前n個字元
string& replace (size_t pos, size_t len, const char* s, size_t n);
// 把i1和i2之間的字元串替換成字元數組s裡面的前n個字元
string& replace (const_iterator i1, const_iterator i2, const char* s, size_t n);
// 把pos後面len長度的字元串替換成n個字元c
string& replace (size_t pos, size_t len, size_t n, char c);
// 把i1和i2之間的字元串替換成n個字元c
string& replace (const_iterator i1, const_iterator i2, size_t n, char c);
// 把i1和i2之間的字元串替換成迭代器first與last之間的內容
template <class InputIterator>
string& replace (const_iterator i1, const_iterator i2, InputIterator first, InputIterator last);
// 把字元串i1和i2之間的內容替換成il里的所有字元
string& replace (const_iterator i1, const_iterator i2, initializer_list<char> il);
- 添加
在字元串的末尾添加另一個字元串的內容
// 在字元串的末尾添加另一個字元串str
string& append (const string& str);
string& operator+= (const string& str);
// 在字元串的末尾添加兩一個字元串str的subpos後面sublen長度的字元串
string& append (const string& str, size_t subpos, size_t sublen);
// 在字元串的末尾添加字元數組s里的所有內容
string& append (const char* s);
string& operator+= (const char* s);
// 在字元串的末尾添加字元數組s的前n個字元
string& append (const char* s, size_t n);
// 在字元串的末尾添加n個字元c
string& append (size_t n, char c);
// 在字元串的末尾添加一個字元c
string& operator+= (char c);
// 在字元串的末尾添加迭代器first與last之間的字元
template <class InputIterator>
string& append (InputIterator first, InputIterator last);
// 在字元串的末尾添加il里的所有內容
string& append (initializer_list<char> il);
string& operator+= (initializer_list<char> il);
- 賦值
用新的字元串替換掉本字元串的內容
// 用str替換掉本字元串的內容
string& assign (const string& str);
string& operator= (const string& str);
// 用str里的subpos後面sublen個長度的字元串替換掉本字元串的內容
string& assign (const string& str, size_t subpos, size_t sublen);
// 用字元數組s里的的所有字元替換掉本字元串的內容
string& assign (const char* s);
string& operator= (const char* s);
// 用字元數組s的前n個字元替換掉本字元串里的內容
string& assign (const char* s, size_t n);
// 把本字元串替換成n個字元c
string& assign (size_t n, char c);
// 用迭代器first和last之間的字元替換掉本字元串的內容
template <class InputIterator>
string& assign (InputIterator first, InputIterator last);
// 用il里的所有字元串替換掉本字元串的內容
string& assign (initializer_list<char> il);
string& operator= (initializer_list<char> il);
// 用str替換掉本字元串的內容
string& assign (string&& str) noexcept;
string& operator= (string&& str) noexcept;
// 將字元串的長度置為1,並把字元C填充到字元串里
string& operator= (char c);
- 刪除
刪除指定位置後面指定長度的字元
// 刪除pos後面len個長度的字元
string& erase (size_t pos = 0, size_t len = npos);
// 刪除迭代器p到末尾的所有字元
iterator erase (iterator p);
// 刪除迭代器first與last之間的字元
iterator erase (iterator first, iterator last);
- 清空
清空字元串,得到一個空的字元串
// 清空字元串
void clear() noexcept;
- 為空
判斷字元串的內容是否為空
// 判斷字元串是否為空
bool empty() const noexcept;
- 剪切
得到指定位置後面指定長度的字元串
// 返回pos後面len個長度的字元串
string substr (size_t pos = 0, size_t len = npos) const;
- 比較
指定位置後面指定長度的字元串與另一個字元串進行比較
返回值:0,兩個字元串相等;
<0,參與比較的字元串不匹配的第一個字元的值較低,或者所有比較的字元都匹配但參與比較的字元串較短;
>0,參與比較的字元串不匹配的第一個字元的值更大,或者所有比較的字元都匹配但參與比較的字元串更長。
// 本字元串與str進行比較
int compare (const string& str) const noexcept;
// 本字元串pos後面len長度的字元串與str進行比較
int compare (size_t pos, size_t len, const string& str) const;
// 本字元串pos後面len長度的字元串與str的subpos位置後面sublen長度的字元串進行比較
int compare (size_t pos, size_t len, const string& str, size_t subpos, size_t sublen) const;
// 本字元串與字元數組的所有字元進行比較
int compare (const char* s) const;
// 本字元串pos後面len長度的字元串與字元數組s里的所有字元進行比較
int compare (size_t pos, size_t len, const char* s) const;
// 本字元串pos後面len長度的字元串與字元數組s里前n個字元進行比較
int compare (size_t pos, size_t len, const char* s, size_t n) const;
- 交換
與另一個字元串交換它們的內容
// 與str交換內容
void swap (string& str);
- 修改長度
請求修改字元串容量的大小,長度最多為n個字元。
如果n大於當前的字元串容量,則該函數會使容器將其容量增加到n個字元(或更大)。
在所有其他情況下,它都被視為縮小字元串容量的非綁定請求:容器實現可以自由地進行優化,並使字元串的容量大於n。
此函數對字元串長度沒有影響,也不能改變其內容。
// 將字元串的長度重置為n
void reserve (size_t n = 0);
- 重設
把字元串重新設置成指定的長度的字元
如果重設後的長度小於原長度,刪除多餘的字元
如果重設後的長度大於原長度,則在結尾處插入空字元或指定的字元到達指定的長度
// 將字元串重設成n個長度的空字元串
void resize (size_t n);
// 將字元串重設成n個長度的c字元
void resize (size_t n, char c);
- 刪除末尾字元
刪除字元串末尾的一個字元
// 彈出字元串末尾的一個字元
void pop_back();
- 在末尾添加字元
在字元串的末尾添加一個字元
// 在字元串的末尾添加一個字元c
void push_back (char c);
- 得到C類型的字元串
轉換成等價的C字元串
// 轉換成等價的C字元串
const char* c_str() const noexcept;
// 得到該字元串的數組指針
const char* data() const noexcept;
- 取字元
得到指定位置處的字元
// 得到指定位置處的字元
char& at (size_t pos);
const char& at (size_t pos) const;
char& operator[] (size_t pos);
const char& operator[] (size_t pos) const;
// 得到字元串的第一個字元
char& front();
const char& front() const;
// 得到字元串的最後一個字元
char& back();
const char& back() const;
- 拷貝
將字元串的指定內容拷貝到字元數組裡
// 將字元串pos處開始的len長度的字元串拷貝到字元數組s裡面
size_t copy (char* s, size_t len, size_t pos = 0) const;
- 交換
交換兩個字元串里的內容
// 交換x換y的值
void swap (string& x, string& y);
- 查找
查找字元串中指定字元或字元串出現的第一處位置
如果沒有匹配的,返回string::npos
// 從字元串的pos處開始查找與字元串str相同的字元串
size_t find (const string& str, size_t pos = 0) const;
// 從字元串的pos處開始查找與字元數組s相同的字元串
size_t find (const char* s, size_t pos = 0) const;
// 從字元串的pos處開始長度為n的範圍內查找與字元數組s相同的字元串
size_t find (const char* s, size_t pos, size_t n) const;
// 從字元串串的pos處開始查找與字元c相同的字元
size_t find (char c, size_t pos = 0) const;
查找字元串中指定字元或字元串出現的最後一處位置
如果沒有匹配的,返回string::npos
// 查找在字元串pos之前的最後一個與字元串str相匹配的字元串的位置
size_t rfind (const string& str, size_t pos = npos) const noexcept;
// 查找在字元串pos之前的最後一個與字元數組s相匹配的字元串的位置
size_t rfind (const char* s, size_t pos = npos) const;
// 查找在字元串pos之前的n個字元內最後一個與字元數組s相匹配的字元串的位置
size_t rfind (const char* s, size_t pos, size_t n) const;
// 查找在字元串pos之前的最後一個與字元c匹配的字元的位置
size_t rfind (char c, size_t pos = npos) const noexcept;
查找字元串中與其參數中指定的任何字元匹配的第一個字元
如果沒有匹配的,返回string::npos
// 查找字元串中的pos處開始與字元串str里的任一字元相同的第一個位置
size_t find_first_of (const string& str, size_t pos = 0) const noexcept;
// 查找字元串中的pos處開始與字元數組s里的任一字元相同的第一個位置
size_t find_first_of (const char* s, size_t pos = 0) const;
// 查找字元串中的pos處開始長度為n的字元串內與字元數組s里的任一字元相同的第一個位置
size_t find_first_of (const char* s, size_t pos, size_t n) const;
// 查找字元串中的pos處開始第一個與字元c相同的位置
size_t find_first_of (char c, size_t pos = 0) const noexcept;
查找字元串中與其參數中指定的任何字元匹配的最後一個字元
如果沒有匹配的,返回string::npos
// 查找字元串中的pos之前的所有字元與字元串str里的任一字元相同的最後一個位置
size_t find_last_of (const string& str, size_t pos = npos) const noexcept;
// 查找字元串中的pos之前的所有字元與字元數組s里的任一字元相同的最後一個位置
size_t find_last_of (const char* s, size_t pos = npos) const;
// 查找字元串中的pos之前長度為n的字元串內與字元數組s里的任一字元相同的最後一個位置
size_t find_last_of (const char* s, size_t pos, size_t n) const;
// 查找字元串中的pos之前的所有字元里最後一個與字元c相同的位置
size_t find_last_of (char c, size_t pos = npos) const noexcept;
查找字元串中與指定的字元數組或字元串里的任一字元都不匹配的第一個位置
如果沒有找到(即參與比較的部分完全相同),返回string::npos
// 比較字元串pos後面的全部字元與字元串str里的任一字元都不同的第一個字元所在的位置
size_t find_first_not_of (const string& str, size_t pos = 0) const noexcept;
// 比較字元串pos後面的全部字元與字元數組s里的任一字元都不同的第一個字元所在的位置
size_t find_first_not_of (const char* s, size_t pos = 0) const;
// 比較字元串pos後面的n個字元與字元數組s里的任一字元都不同的第一個字元所在的位置
size_t find_first_not_of (const char* s, size_t pos, size_t n) const;
// 比較字元串pos後面的全部字元與字元c不同的第一個字元所在的位置
size_t find_first_not_of (char c, size_t pos = 0) const noexcept;
查找字元串中與指定的字元數組或字元串里的任一字元都不匹配的最後一個位置
如果沒有找到(即參與比較的部分完全相同),返回string::npos
// 比較字元串pos前面的全部字元與字元串str里的任一字元都不同的最後一個字元所在的位置
size_t find_last_not_of (const string& str, size_t pos = npos) const noexcept;
// 比較字元串pos前面的全部字元與字元數組s里的任一字元都不同的最後一個字元所在的位置
size_t find_last_not_of (const char* s, size_t pos = npos) const;
// 比較字元串pos前面的n個字元與字元數組s里的任一字元都不同的最後一個字元所在的位置
size_t find_last_not_of (const char* s, size_t pos, size_t n) const;
// 比較字元串pos前面的全部字元與字元c不同的最後一個字元所在的位置
size_t find_last_not_of (char c, size_t pos = npos) const noexcept;
- operator
重載+運算符
返回一個新構造的字元串對象,其值為lhs中的字元和rhs中的字元的連接
string operator+ (const string& lhs, const string& rhs);
string operator+ (string&& lhs, string&& rhs);
string operator+ (string&& lhs, const string& rhs);
string operator+ (const string& lhs, string&& rhs);
string operator+ (const string& lhs, const char* rhs);
string operator+ (string&& lhs, const char* rhs);
string operator+ (const char* lhs, const string& rhs);
string operator+ (const char* lhs, string&& rhs);
string operator+ (const string& lhs, char rhs);
string operator+ (string&& lhs, char rhs);
string operator+ (char lhs, const string& rhs);
string operator+ (char lhs, string&& rhs);
重載==運算符
比較lhs與rhs是否相等
bool operator== (const string& lhs, const string& rhs) noexcept;
bool operator== (const char* lhs, const string& rhs);
bool operator== (const string& lhs, const char* rhs);
重載!=運算符
比較lhs與rhs是否不等
bool operator!= (const string& lhs, const string& rhs) noexcept;
bool operator!= (const char* lhs, const string& rhs);
bool operator!= (const string& lhs, const char* rhs);
重載<運算符
比較lhs是否小於rhs
bool operator< (const string& lhs, const string& rhs) noexcept;
bool operator< (const char* lhs, const string& rhs);
bool operator< (const string& lhs, const char* rhs);
重載<=運算符
比較lhs是否小於等於rhs
bool operator<= (const string& lhs, const string& rhs) noexcept;
bool operator<= (const char* lhs, const string& rhs);
bool operator<= (const string& lhs, const char* rhs);
重載>運算符
比較lhs是否大於rhs
bool operator> (const string& lhs, const string& rhs) noexcept;
bool operator> (const char* lhs, const string& rhs);
bool operator> (const string& lhs, const char* rhs);
重載>=運算符
比較lhs是否大於等於rhs
bool operator>= (const string& lhs, const string& rhs) noexcept;
bool operator>= (const char* lhs, const string& rhs);
bool operator>= (const string& lhs, const char* rhs);
- 輸入輸出流
從流中插入/獲取字元串
// 從流中提取字元串
istream& operator>> (istream& is, string& str);
// 將字元串插入流
ostream& operator<< (ostream& os, const string& str);
// 從流is中提取一行字元串到str中,直到劃分字元delim為止
istream& getline (istream& is, string& str, char delim);
istream& getline (istream&& is, string& str, char delim);
// 從流is中提取一行字元串到str中,直到換行為止
istream& getline (istream& is, string& str);
istream& getline (istream&& is, string& str);