标准库中的string类
为什么学习string类?
C语言的字符串以\0结尾,不好对其进行增删查改。c++的string类弥补了这样的缺陷一、构造函数
std::string::string
主要学习以下(1)~(6)1.默认构造
原型:string();
2.拷贝构造(深拷贝)
原型:string (const string& str);
3.substring 构造函数
原型:string (const string& str, size_t pos, size_t len = npos);
说明:复制 str 中从字符位置 pos 开始并跨越 len个字符的部分(如果任一 str 太短或 len 为 string::npos,则复制到 str 末尾)(第一个位置为0)std::string::npos
原型:string::npos;
static const size_t npos = -1; //npos是无符号整型的最大值42亿9000万4.用C语言字符串构造
原型:string (const char* s);
注意: 字符串s被有参构造为一个临时对象,临时对象再去拷贝构造s
说明: 有参构造和拷贝构造在一个步骤,编译器优化为"hello"直接构造s5.来自C语言字符串前n个构造
原型:string (const char* s, size_t n);
说明:复制 s 指向的以 null 结尾的字符串的前n个字符 (第一个位置为1)6.填充构造
原型:string(size_t n, char c)
说明:用字符 c 的 n 个连续字符填充
二、重载赋值运算符(深拷贝)
std::string::operator=
字符、字符串、string类对象
三、迭代器
1.std::string::begin和std::string::rbegin
返回值:指向字符串的第一个(最后一个(\0的前一个))字符
2.std::string::end和std::string::rend
同理
返回值:.end()指向\0, .rend()指向第一个字符的前一个位置
3.iterator
std::string::iterator
std::string::const_iterator //一般传参(形参是const)后函数里面用。不可改
std::string::reverse_iterator
std::string::const_reverse_iterator //一般传参(形参是const)后函数里面用。不可改
四、容量相关函数
1.返回字符串长度
std::string::size
原型:size_t size() const;
原型:size_t length() const;
说明:size()和lenth()的用法相同,早期用lenth表示长度更符合string的意义,STL出现后别的一些容器之类的用长度表示不合适,为了统一所以用size表示大小2.返回容量 (容量不包括末尾\0,但是增容时会多增加一个)
std::string::capacity
原型:size_t capacity() const;
3.清除字符串
std::string::clear
原型:void clear();
说明:只把类中size弄成0,capacity不变4.判断字符串是否为空
std::string::empty
原型:bool empty() const;
5.请求容量的改变
std::string::reserve
原型:void reserve (size_t n = 0);
s.reverse(100);//直接开100个空间 //考虑内存对齐,实际不会给100,开整数倍,大于一百
6.调整字符串大小
std::string::resize
原型:void resize (size_t n);
原型:void resize (size_t n, char c);
说明:如果 n 小于当前字符串长度,则当前值将缩短为前 n 个字符
如果 n 大于当前字符串长度,则通过在末尾插入字符c,默认插入null字符string s("12345"); s.resize(100); //size变成100,100之内多余的空间'\0'填充, //其中capacity也会改变(>100)内存对齐
string s("12345"); s.resize(3); // 输出123 //size变成3,capacity不变
五、元素访问
1.std::string::operator[]
说明:非const对象可在[ ] 访问时修改,const对象不能改
六、插入删除
1.尾插
std::string::push_back
原型:void push_back(char c);
说明:尾插一个字符2.追加
std::string::append
主要学习(1)(3)原型:string& append (const string& str);
说明:追加一个string类对象原型:string& append (const char s*);
说明:追加一个字符串(不是字符)3.operator+=(常用)
std::string::c_str
4.任意位置插入
std::string::insert
主要掌握(1)(3)(6)
原型:string& insert (size_t pos, const string& str);
说明:在pos位置插入string类对象 (第一个位置是0)原型:string& insert (size_t pos, const char* s);
说明:在pos位置插入字符串 (不是字符) (第一个位置是0)原型:iterator insert (iterator p, char c);
5.删除
std::string::erase
原型:string& erase (size_t pos = 0, size_t len = npos);
说明:pos位置开始删除len个字符,默认删除到结尾 (第一个位置是0)
七、字符串操作
1.返回C类型的字符串
std::string::c_str
原型:const char* c_str() const;
2.查找
std::string::find
原型:size_t find (char c, size_t pos = 0) const;
说明:从pos位置开始找(默认从头)找不到返回npos(第一个位置是0)std::string::rfind
原型:size_t rfind (char c, size_t pos = npos) const;
说明:从后往前找(默认从最后开始)(第一个位置是0)3.取子串
std::string::substr
原型:string substr (size_t pos = 0, size_t len = npos) const;
说明:从pos位置开始取len个字符(默认从头取到尾)
5.成员常量
std::string::npos
八.非成员函数重载
注意是非成员函数的重载
1.连接字符串
std::operator+ (string)
2.重载输入输出
std::operator>> (string)
原型:istream& operator>> (istream& is, string& str);
std::operator<< (string)
原型:ostream& operator<< (ostream& os, const string& str);
3.获取一行字符串
cin遇到空字符停下,如 ‘ ’,‘\t’,‘\n’
std::getline (string)原型:istream& getline (istream& is, string& str, char delim);
说明:输入流中读取到字符delim停止 (不包括字符delim)原型:istream& getline (istream& is, string& str);
说明:输入流中读取到 ‘\n’ 停止
九、练习:实现数字字符串转整形
C++标准模板库string类
于 2023-11-26 02:19:51 首次发布