C++ string常用函数使用方法大总结!

C++ 中的 string 类

C++中的 string 类是一个用于表示和操作字符串的类(容器),它是C++标准库的一部分。std::string提供了许多有用的成员函数来处理字符串,这些成员函数使得操作字符串变得更加简便。

这里列举一些常见的用法和功能,但不是所有。要查看所有用法和功能,请参阅C++标准库文档。

还有以下,是我写的一些关于string函数的使用注意事项,详情请看这篇文章:

构造函数

string(); // 默认构造函数
string(const string& other); // 拷贝构造函数
string(string&& other); // 移动构造函数
string(const char* s); // 从C字符串构造
string(const char* s, size_t n); // 从C字符串构造,取前n个字符
string(size_t n, char c); // 用n个字符c构造

常用成员函数

容器相关

size_t size() const; // 返回字符串长度
size_t length() const; // 同上
bool empty() const; // 判断字符串是否为空
void clear(); // 清空字符串
size_t max_size() const; // 返回字符串对象最大可容纳的字符数
void resize(size_t n); // 调整字符串大小
void resize(size_t n, char c); // 调整大小并用字符c填充

下标运算符

char& operator[](size_t pos); // 获取指定位置的字符引用
char& at(size_t pos); // 同上,但会检查越界
char& front(); // 返回第一个字符引用
char& back(); // 返回最后一个字符引用
  • 注意:string的下标运算符不检查数组越界!!!

给string赋值与 += 运算符

string& operator=(const string& other); // 赋值运算符
string& operator=(string&& other); // 移动赋值运算符
string& operator=(const char* s); // 从C字符串赋值

string& operator+=(const string& other); // 字符串拼接
string& operator+=(const char* s); // 从C字符串拼接
string& operator+=(char c); // 追加字符

删除字符操作

void pop_back(); // 移除最后一个字符,容器操作

string& erase(size_t pos = 0, size_t len = string::npos);
// 删除从位置pos开始,长度为len的子串

添加,插入字符操作

void push_back(char c); // 在容器的尾部,添加一个字符
string& insert(size_t pos, const string& str); 
// 在位置pos插入字符串str

交换字符串内容

void swap(string& other); // 交换两个字符串内容

查找函数

// 从位置pos开始查找子串str,返回找到的第一个位置,未找到则返回npos
size_t find(const string& str, size_t pos = 0) const; 

// 从位置pos开始反向查找子串str,返回找到的第一个位置,未找到则返回npos
size_t rfind(const string& str, size_t pos = npos) const; 


比较两个字符串大小

int compare(const std::string& str) const;
 // 比较两个字符串,相等返回0,小于返回负数,大于返回正数

比较规则

  • C++中的string类型的比较是基于字符的逐一比较,即从字符串的第一个字符开始比较,如果有一个字符不同,则两个字符串不相等。在您提供的例子中,第3个字符和第4个字符是不同的,所以这两个字符串不相等。因此,使用bool operator==比较boot和boor时,将返回false。

替换字符操作

void replace(size_t pos, size_t len, const std::string& str); 
// 用字符串str替换从位置pos开始,长度为len的子串

std::string& replace(size_t pos, size_t len, const char* s); 
// 用C字符串s替换从位置pos开始,长度为len的子串

拷贝字符操作

// 获取(拷贝)子字符串,从位置pos开始,长度为len
string substr(size_t pos = 0, size_t len = npos) const; 

size_t copy(char* s, size_t len, size_t pos = 0) const;
 // 将从位置pos开始,长度为len的子串复制到字符数组s中
  • 需要注意的是,substr函数的返回值,就是拷贝好的子字符串,具体用法是
string value = "hello, world!";
int pos = 0;
int len_a = 5;
string str = value.substr(pos, len_a);
那么此时的str = hello
  • 而这里的copy函数呢,其实是把某一个string类型的字符串的n个字符,复制到一个字符类型的数组中。
int pos = 0;
int len_a = 5;
string value = "hello, world!";
char* buffer = new char[len_a + 1];
value.copy(buffer, len_a, pos);
buffer[len_a] = '\0'; // 添加结束字符
string str = buffer; // 使用字符数组创建新的字符串
delete[] buffer; // 释放字符数组
  • 啊,看起来就很麻烦对嘛,所以在做算法题的时候,string真正的复制函数,还得是substr函数

内存相关

allocator_type get_allocator() const; // 返回字符串对象的内存分配器

非成员函数:

string operator+(const std::string& lhs, const std::string& rhs); 
// 字符串连接

string operator+(const std::string& lhs, const char* rhs); 
// 字符串与C字符串连接

string operator+(const char* lhs, const std::string& rhs);
 // C字符串与字符串连接

string operator+(std::string&& lhs, std::string&& rhs); 
// 移动字符串连接

string operator+(std::string&& lhs, const std::string& rhs); 
// 移动字符串与字符串连接

string operator+(const std::string& lhs, std::string&& rhs); 
// 字符串与移动字符串连接

bool operator==(const std::string& lhs, const std::string& rhs); 
// 字符串相等比较

bool operator!=(const std::string& lhs, const std::string& rhs);
 // 字符串不等比较

bool operator<(const std::string& lhs, const std::string& rhs); 
// 字符串小于比较

bool operator<=(const std::string& lhs, const std::string& rhs);
 // 字符串小于等于比较

bool operator>(const std::string& lhs, const std::string& rhs); 
// 字符串大于比较

bool operator>=(const std::string& lhs, const std::string& rhs); 
// 字符串大于等于比较

std::istream& operator>>(std::istream& is, std::string& str); 
// 输入流读取字符串

std::ostream& operator<<(std::ostream& os, const std::string& str);
 // 输出流写入字符串

std::istream& getline(std::istream& is, std::string& str, char delim = '\n'); 
// 从输入流读取一行

总结

  • 注意:这里的列表并不完整,还有很多其他成员和非成员函数。要查看完整的列表,请查阅C++标准库文档。同时,也可以查看C++标准库中关于std::string_view的相关用法,std::string_view是一个轻量级的字符串视图,可以更高效地处理字符串。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿宋同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值