1. 构造函数
std::string()
: 创建一个空字符串。std::string s1; // 空字符串
std::string(const char* s)
: 使用 C 风格的字符串初始化std::string
对象。std::string s2("Hello"); // 创建 "Hello"
std::string(size_t n, char c)
: 创建一个包含n
个字符c
的字符串。std::string s3(5, 'a'); // 创建 "aaaaa"
2. 容量与大小
size()
: 返回字符串的长度(字符数)。
size_t len = s.size(); // s = "Hello",返回 5
length()
: 返回字符串的长度(与size()
等价)。size_t len = s.length(); // s = "Hello",返回 5
empty()
: 判断字符串是否为空。
bool isEmpty = s.empty(); // s = "Hello",返回 false
capacity()
: 返回字符串在不重新分配内存的情况下可以存储的字符数。
size_t cap = s.capacity(); // 返回容量值
resize(size_t n)
: 将字符串大小调整为n
,多出的部分填充空字符。
s.resize(10); // s = "Hello",调整为 "Hello "
clear()
: 清空字符串。
s.clear(); // s 变为空字符串 ""
3. 访问字符
operator[]
: 使用索引访问字符串中的字符。
char first = s[0]; // s = "Hello",返回 'H'
at(size_t pos)
: 访问指定位置的字符,带有越界检查。
char last = s.at(4); // s = "Hello",返回 'o'
front()
: 返回字符串的第一个字符。
char front = s.front(); // s = "Hello",返回 'H'
back()
: 返回字符串的最后一个字符。
char back = s.back(); // s = "Hello",返回 'o'
4. 修改字符串
append(const std::string& str)
: 在字符串末尾追加另一个字符串。
s.append(" World"); // s = "Hello",变为 "Hello World"
push_back(char c)
: 在字符串末尾追加一个字符。
s.push_back('!'); // s = "Hello World",变为 "Hello World!"
insert(size_t pos, const std::string& str)
: 在指定位置插入一个字符串。
s.insert(5, ","); // s = "Hello World",变为 "Hello, World!"
erase(size_t pos = 0, size_t len = npos)
: 删除从指定位置开始的len
个字符。s.erase(5, 1); // s = "Hello, World!",变回 "Hello World!"
replace(size_t pos, size_t len, const std::string& str)
: 用指定字符串替换从pos
开始的len
个字符。
s.replace(6, 5, "Universe"); // s = "Hello World",变为 "Hello Universe!"
pop_back()
: 删除字符串的最后一个字符。
s.pop_back(); // s = "Hello Universe!",变为 "Hello Universe"
5. 查找
find(const std::string& str, size_t pos = 0)
: 查找子字符串第一次出现的位置。
size_t pos1 = s.find("World"); // s = "Hello World",返回 6
rfind(const std::string& str, size_t pos = npos)
: 查找子字符串最后一次出现的位置。
size_t pos2 = s.rfind("l"); // s = "Hello World",返回 9
find_first_of(const std::string& str, size_t pos = 0)
: 查找字符串中任何一个字符第一次出现的位置。
size_t pos3 = s.find_first_of("aeiou"); // s = "Hello World",返回 1 ('e')
find_last_of(const std::string& str, size_t pos = npos)
: 查找字符串中任何一个字符最后一次出现的位置。
size_t pos4 = s.find_last_of("aeiou"); // s = "Hello World",返回 7 ('o')
find_first_not_of(const std::string& str, size_t pos = 0)
: 查找第一个不在给定字符串中的字符。
size_t pos5 = s.find_first_not_of("Helo "); // s = "Hello World",返回 6 ('W')
find_last_not_of(const std::string& str, size_t pos = npos)
: 查找最后一个不在给定字符串中的字符。
size_t pos6 = s.find_last_not_of("drlWo"); // s = "Hello World",返回 4 ('o')
6. 子字符串
substr(size_t pos = 0, size_t len = npos)
: 返回从指定位置开始的子字符串(提取功能)。
std::string sub = s.substr(6, 5); // s = "Hello World",返回 "World"
7. 比较
compare(const std::string& str)
: 按字典顺序比较两个字符串。
int cmp = s1.compare(s2); // s1 = "Apple", s2 = "Banana",返回负数,
在字典顺序比较时,首先比较s1
和s2
的第一个字符。字符A
(在s1
中) 的 ASCII 值是 65,而字符B
(在s2
中) 的 ASCII 值是 66。因为 65 < 66,s1
小于s2
,所以compare
返回负数。operator==, operator!=, operator<, operator<=, operator>, operator>=
: 比较字符串相等或大小。
bool equal = (s1 == s2); // s1 = "Apple", s2 = "Banana",返回 false bool lessThan = (s1 < s2); // s1 = "Apple", s2 = "Banana",返回 true
8. 转换
c_str()
: 返回 C 风格的字符串(const char*
)。const char* cstr = s.c_str(); // s = "Hello",返回 "Hello"
data()
: 返回字符数组指针(非空终止)。
const char* data = s.data(); // s = "Hello",返回 "Hello"
9. 输入输出
operator>>
: 从输入流读取字符串。std::cin >> s; // 读取输入
operator<<
: 将字符串写入输出流。std::cout << s << std::endl; // 输出字符串