文章目錄
- 🌈 Ⅰ string 類對象的常見構造函數
- 🌈 Ⅱ string 類對象的容量相關操作
- 🌈 Ⅲ string 類對象的訪問及遍歷
- 1. 下標訪問及遍歷
- 2. 正向迭代器訪問
- 3. 反向迭代器訪問
- 🌈 Ⅳ string 類對象的修改操作
- 1. 插入字符或字符串
- 2. 字符替換
- 🌈 Ⅴ string 類對象的操作
- 1. 查找指定字符位置
- 2. 獲取字符串的子串
🌈 Ⅰ string 類對象的常見構造函數
函數說明
函數名稱 | 功能說明 |
---|---|
string() | 構造一個空的 string 類對象,即空字符串 |
string(const char* s) | 用一個常量字符串來構造 string 類對象 |
string(const string& s, size_t pos, size_t len = npos) | 從指定字符串 s 的 pos 下標處開始拷貝 len 個字符去構造 string 類對象,如果 len 超過了 pos 之后的字符個數,則從 pos 開始直接取到字符串 s 的末尾 |
string(size_t n, char c) | 使用 n 個指定字符 c 來構建 string 類對象 |
string(cost string& s) | 使用一個已有的 string 類對象去拷貝構造另一個 string 類對象 |
使用示例
#include <iostream>using std::cout;
using std::endl;
using std::string;void test1()
{string str1; // 生成空字符串string str2("hello wordl!"); // 用指定常量字符串構造 string 對象string str3("hello", 3, 10); // 從下標為 3 的字符開始拷貝 10 個字符構造string str4(5, 'x'); // 生成由五個 x 構成的 string 字符串對象string str5(str2); // 用 str2 來拷貝構造 str5 對象
}
🌈 Ⅱ string 類對象的容量相關操作
函數說明
函數名稱 | 功能說明 |
---|---|
size() | 返回字符串有效字符長度,即 \0 之前的字符個數 |
capacity() | 求當前 string 能容納的最大有效字符個數,計算的結果不包括 \0 |
empty() | 判斷指定字符串是否為空串,是則返回 true,否則返回 false |
clear() | 清空指定字符串中的所有有效字符 |
reserve(n) | 為指定字符串預留指定 n 個字節的空間,實際開辟的空間只會 >= n |
resize(n, c) | 將有效字符的個數改為 n,如果 n 大于原有效字符的個數則用指定字符 c 填充剩余位置,反之刪除有效字符個數 |
使用示例
void test2()
{string str1("hello world!");cout << "size: " << str1.size() << endl; // 求 str1 串的有效字符個數cout << "capacity: " << str1.capacity() << endl;// 求 str1 能容納的有效字符個數cout << "empty: " << str1.empty() << endl; // 判斷 str1 是否為空串str1.clear(); // 清空 str1 中的所有有效字符cout << "clear: " << str1 << endl;str1.reserve(100); // 為 str1 預開辟 >= 100 字節的空間cout << "reserve(100): " << str1.capacity() << endl;string str2("hello world!");str2.resize(5); // 將 str2 中的有效字符個數改為 5 個cout << "resize(5): " << str2 << endl;string str3("hello world!");str3.resize(30, '#'); // 有效字符數改為 30 個,超出的部分用 # 填充cout << "resize(5, '#'): " << str3 << endl;
}
🌈 Ⅲ string 類對象的訪問及遍歷
1. 下標訪問及遍歷
- 就和遍歷普通的字符串對象一樣,可以使用下標訪問字符串中的每個字符。
- 能夠使用下標訪問 string 類對象的內容,實際上是在 string 類中使用 operator[ ] 對 [ ] 進行了運算符重載。
2. 正向迭代器訪問
- 正向迭代器分為兩種:普通正向迭代器;常量正向迭代器。
1. string 類下的正向迭代器定義格式
- 普通正向迭代器
string::iterator 迭代器名 = 對象名.begin() 或 對象名.end();
- 常量正向迭代器
string::const_iterator 迭代器名 = 對象名.begin 或 對象名.end();
2. string 類下的正向迭代器介紹
- 對于正向迭代器,可以使用 begin() 函數返回一個指向指向字符串首字符的迭代器,也可以使用 end() 返回一個指向最后一個有效字符的下一個位置的迭代器。
- 迭代器指向的字符可以使用 * 訪問,可以對迭代器進行 ++ 或 - - 操作指向字符串的不同字符。
- 普通的迭代器可以修改迭代器指向的內容,常量迭代器則不能。
3. string 類下的正向迭代器示例
3. 反向迭代器訪問
- 反向迭代器分為兩種:普通反向迭代器;常量反向迭代器。
1. string 類下的反向迭代器定義格式
- 普通反向迭代器
string::reverse_iterator 迭代器名 = 對象名.rbegin() 或 對象名.rend();
- 常量反向迭代器
string::const_reverse_iterator 迭代器名 = 對象名.rbegin() 或 對象名.rend();
2. string 類下的反向迭代器介紹
- 對于反向迭代器,可以使用 rbegin() 返回一個指向最后一個有效字符的迭代器,rend() 返回一個指向字符串首字符前一個位置的迭代器。
- 不管是迭代器是正向還是反向,對迭代器進行 ++ 操作始終是讓迭代器靠近 ?end 的位置 ,對迭代器進行 – 操作始終是讓迭代器遠離 ?end 的位置。
3. string 類下的反向迭代器示例
🌈 Ⅳ string 類對象的修改操作
1. 插入字符或字符串
函數說明
- 以下實現插入的函數操作在插入之后如果超過字符串容量都會自動實現擴容。
函數名稱 | 功能說明 |
---|---|
push_back( c ) | 在指定字符串的末尾插入一個字符 |
insert(pos, string) | 在字符串指定的 pos 位置插入一個字符串,原 pos 位置及之后的字符都要后移 |
append(string) | 在原字符串后追加一個字符串 |
operator+= | 對 += 進行了重載,在原字符串后追加一個字符串 |
使用示例
void test4()
{string str1("hello");str1.push_back('#'); // 將 # 尾插入 st1 末尾string str2("hello");str2.insert(0, "insert "); // 在下標 0 處插入字符串string str3("hello");str3.append(" append"); // 在字符串末尾追加字符串string str4("hello");str4 += " operator+="; // 在字符串末尾追加字符串
}
2. 字符替換
函數說明
函數名稱 | 功能說明 |
---|---|
replace(pos, n, s) | 將字符串中 pos 位置開始的 n 個字符替換成字符串 s |
使用示例
🌈 Ⅴ string 類對象的操作
1. 查找指定字符位置
函數說明
函數名稱 | 功能說明 |
---|---|
find(c, pos) | 從字符串的 pos 位置開始 往后 查找指定字符 c,返回該字符在字符串中的位置,如果不提供 pos 默認從第一個有效字符開始,如果找不到指定字符 c 則返回一個 string::npos |
rfind(c, pos) | 從字符串的 pos 位置開始 往前 查找指定字符 c,返回該字符在字符串中的位置,如果不提供 pos 默認從最后一個有效字符開始,如果找不到指定字符 c 則返回一個 string::npos |
使用示例
void test5()
{string str("hello hello");size_t pos1 = str.find('e', 0); // 從第 1 個字符開始 往后 找字符 e 的位置size_t pos2 = str.rfind('e', 9);// 從第 10 個字符開始 往前 找字符 e 的位置if (pos1 != string::npos) // find 找到了指定字符 e{cout << "find: " << pos1 << endl;}if (pos2 != string::npos) // rfind 找到了指定字符 e{cout << "rfind: " << pos2 << endl;}
}
2. 獲取字符串的子串
函數說明
函數名稱 | 函數功能 |
---|---|
substr(pos, n) | 截取指定字符串的從 pos 下標開始的往后 n 個字符作為該串的子串返回,如果不指定 n,則默認從 pos 位置一直取到字符串末尾 |
使用示例
void test5()
{string str("hello world!");string sub1 = str.substr(3, 5); // 從下標 3 開始截取 5 個字符string sub2 = str.substr(3); // 從下標 3 開始一直取到最后一個有效字符
}