💖💖💖欢迎来到我的博客,我是anmory💖💖💖
又和大家见面了
欢迎来到C++探索系列
作为一个程序员你不能不掌握的知识
先来自我推荐一波
个人网站欢迎访问以及捐款
推荐阅读
如何低成本搭建个人网站
专栏:动画详解leetcode算法题
C语言知识
String常用接口解读
String类
string是代表了一串字符串的序列
标准string类通过类似于标准字节容器的接口为此类对象提供支持,但添加了专门设计用于处理单字节字符字符串的功能
字符串类是一个实例使用 char(即字节)作为其字符类型的basic_string类模板,其默认char_traits和分配器类型
此类处理字节与所使用的编码无关:如果用于处理多字节或可变长度字符(如 UTF-8)的序列,则此类的所有成员(如长度或大小)及其迭代器仍将根据字节(而不是实际编码字符)进行操作
成员函数
(Constructor):构造函数
string():构造一个空的字符串,长度为0
string(const char* str):拷贝构造一个字符串,参数由函数传递进来
string(const char* str,size_t pos,size_t len = npos):拷贝一个字符串的字串,从pos位置开始拷贝len个,如果len过长那么就从pos位置拷贝全部字符串
string(const char* s):复制以\0结尾的C字符串
string(const char* s,size_t n):拷贝字符串中的前n个字符
string(size_t n,char c):用n个连续的c填充string
更多请参考string构造函数
案例
// string constructor
#include <iostream>
#include <string>
int main ()
{
std::string s0 ("Initial string");
// constructors used in the same order as described above:
std::string s1;
std::string s2 (s0);
std::string s3 (s0, 8, 3);
std::string s4 ("A character sequence");
std::string s5 ("Another character sequence", 12);
std::string s6a (10, 'x');
std::string s6b (10, 42); // 42 is the ASCII code for '*'
std::string s7 (s0.begin(), s0.begin()+7);
std::cout << "s1: " << s1 << "\ns2: " << s2 << "\ns3: " << s3;
std::cout << "\ns4: " << s4 << "\ns5: " << s5 << "\ns6a: " << s6a;
std::cout << "\ns6b: " << s6b << "\ns7: " << s7 << '\n';
return 0;
}
迭代器
begin:返回迭代器到开始位置
end:返回迭代器到结束位置
rbegin:将迭代器指向字符串的末尾
rend:将迭代器指向字符串的开头
cbegin:返回const迭代器到开始位置
cend:返回const迭代器到结束位置
crbegin:将迭代器指向字符串的末尾
crend:将const迭代器指向字符串的开头
更多内容请访问迭代器
容量
size:返回字符串的长度
length:返回字符串的长度
max_size:返回字符串的最大尺寸
capacity:返回字符串的容量
resize:重新为字符串分配大小
reserve:为字符串预留一定空间
clear:清除字符串内容
更多请访问字符串
元素访问
operator[]:获取字符串的字符
更多请访问元素访问
修改操作
operator+=:在字符串末尾添加字符或字符串
append:在字符串末尾添加字符或字符串
push_back:在字符串末尾添加字符
insert:在字符串中插入字符或字符串
erase:在字符串中清除字符或字符串
swap:交换字符串的值
更多请访问修改操作
string操作
c_str:等效的C字符串
find:找到字符串中的内容
find_first_of:找到字符串中的字符
substr:找到字符串中的子串
非成员函数重载
operator+:连接字符串
relational operator:字符串的比较
swap:交换两个字符串的内容
operator>>:流插入,用于输入
operator<<:流提取,用于输出
getline:将流中的行转换为字符串
String常用接口的模拟实现
#pragma once
#include <iostream>
#include <string>
#include <assert.h>
using namespace std;
namespace anmory
{
class string
{
friend ostream& operator<<(ostream& out, const string& s);
//friend istream& operator>>(istream& in, const string& s);
public:
const size_t npos = -1;
// iterator的定义和实现
typedef char* iterator;
typedef const char* const_iterator;
iterator begin()
{
return _str;
}
iterator end()
{
return _str + _size;
}
const_iterator begin() const
{
return _str;
}
const_iterator end() const
{
return _str + _size;
}
//你现在是在string这个类中,我重载的operator++也是stirng的,而不是迭代器的
void clear()
{
_str[0] = '\0';
_size = 0;
}
string(const char* str = "")// 这里不希望能够修改str的值,因此需要使用const
{
_size = strlen(str);
_capacity = _size;
_str = new char[_capacity + 1];// 预留\0的位置
strcpy(_str, str);
}
// 构造函数
string(const string& s)
{
// 防止自我赋值导致错误
if (this != &s)
{
// 行赋值操作
_size = s._size;
_capacity = _size;
_str = new char[_capacity + 1];
strcpy(_str, s._str);
}
}
// 析构函数
~string(


最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



