天天看點

C++ string使用方法

作者:Qt技術開發老jie

string是C++标準模闆庫中專門用于字元串處理的資料結構類型。它并不是 C++的基本資料類型,它是 C++标準模闆庫中的一個“類”。若要使用 string 對象,則必須包含頭檔案#include 。

1. 初始化

常用的初始化有以下幾種,帶等号的是拷貝初始化,

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;

2. 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);           

原文連結:「連結」