PoEduo - C++阶段班【Po学校】-10 STL string- 课堂笔记
STL string类
1-->可变长字符串类
1.0 与C语言中的string.h和C++中的cstring完全的不同。
1.1 Wstring 和 string 区别,前者宽字节 为unicode 编码,后者为窄字节。
2--> string构造 & 赋值操作
2.0 string构造函数
2.0.0 string(); //创建一个空的字符串 例如: string str;
2.0.1 string(const string& other); //使用一个string对象初始化另一个string对象
2.0.2 string(const char* str); //使用字符串str初始化
2.0.3 string(int n, char c); //使用n个字符c初始化
2.0.4 //例子:
//默认构造函数 string s1; //拷贝构造函数 string s2(s1); string s2 = s1; //带参数构造函数 char* str = "I Love Mark"; string s3(str); string s4(10, 'A');
2.1 string基本赋值 operator =() 与 assign()
2.1.0 string& operator=(const char* str); //char*类型字符串 赋值给当前的字符串
2.1.1 string& operator=(const string &other); //把字符串other赋给当前的字符串
2.1.2 string& operator=(char c); //字符赋值给当前的字符串
2.1.3 string& assign(const char *str); //把字符串str赋给当前的字符串
2.1.4 string& assign(const char *str, int n); //把字符串str的前n个字符赋给当前的字符串
2.1.5 string& assign(const string &other); //把字符串other赋给当前字符串
2.1.6 string& assign(int n, char c); //用n个字符c赋给当前字符串
2.1.7 string& assign(const string &s, int start, int n); //将s从start开始n个字符赋值给字符串
2.2 string存取字符 operator[] ()与 at()
2.2.0 char& operator[](int n); //通过[]方式取字符
2.2.1 char& at(int n); //通过at方法获取字符
2.2.3 //例子:
string s = "I Love You!"; char c = s[1]; c = s.at(1);
2.2.4 问:string中存取字符[]和at的异同?
2.2.5 答: 1 相同,[]和at都可以返回第n个字符。 2 不同,at访问越界会抛出异常,[]越界会直接程序会挂掉。
3-->长度
3.0 size_t size(const string &str) const; //求字符串str的长度
3.1 size_t length() const; //求字符串str的长度,和size()没有区别
3.2 bool empty ( ) const; //是否为空字符串,true为空,false为不空
3.3 size_t max_size ( ) const; //string类最大长度
3.4 size_t capacity ( ) const; //当前不增加长度,能存放的最大的长度,会动态改变,会根据字符串长度变化而变化
3.5 void resize ( size_t n, char c ); //字符串长度不足n个时,就填充 char c到字符串
3.6 void resize ( size_t n ); //重新分配了size, 它会重置catacity()的值
4--> 查找和替换
4.0 string查找
4.0.0 int find(const string& str, int pos = 0) const; //查找str第一次出现位置,从pos开始查找
4.0.1 int find(const char* s, int pos = 0) const; //查找s第一次出现位置,从pos开始查找
4.0.2 int find(const char* s, int pos, int n) const; //从pos位置查找s的前n个字符第一次位置
4.0.3 int find(const char c, int pos = 0) const; //查找字符c第一次出现位置
4.0.4 int rfind(const string& str, int pos = npos) const; //查找str最后一次位置,从pos开始查找
4.0.5 int rfind(const char* s, int pos = npos) const; //查找s最后一次出现位置,从pos开始查找
4.0.6 int rfind(const char* s, int pos, int n) const; //从pos查找s的前n个字符最后一次位置
4.0.7 int rfind(const char c, int pos = 0) const; //查找字符c最后一次出现位置
4.1 string替换
4.1.0 string& replace(int pos, int n, const string& str); //替换从pos开始n个字符为字符串str
4.1.1 string& replace(int pos, int n, const char* s); //替换从pos开始的n个字符为字符串s
5-->比较
string比较操作 operator==() 和 compare()
5.0 int compare(const string &str) const; //与字符串str比较
5.1 int compare(const char *s) const; //与字符串s比较
5.2 compare函数在>时返回 1,<时返回 -1,==时返回 0。
5.3 比较区分大小写,比较时参考字典顺序,排越前面的越小。大写的A比小写的a小。
5.4 operator== 和 compare() 区别:compare()可以指定位数来进行比较。
6-->string 子串截取substr()
substr()函数
6.0 string substr(int pos = 0, int n = npos)const; //返回由pos开始的n个字符组成的字符串。
7-->string插入和删除
7.0 string插入 insert()
7.0.1 string& insert(int pos, const char* s); //插入字符串
7.0.2 string& insert(int pos, const string& str); //插入字符串
7.0.3 string& insert(int pos, int n, char c); //在指定位置插入n个字符c
7.1 string删除 erase()
7.1.0 string& erase(int pos, int n = npos); //删除从Pos开始的n个字符
8-->追加(拼接)
8.0 string拼接 operator+= 与 append()
8.1 string& operator+=(const string& str); //重载+=操作符
8.2 string& operator+=(const char* str); //重载+=操作符
8.3 string& operator+=(const char c); //重载+=操作符
8.4 string& append(const char *s); //把字符串s连接到当前字符串结尾
8.5 string& append(const char *s, int n); //把字符串s的前n个字符连接到当前字符串结尾
8.6 string& append(const string &str); //同operator+=()
8.7 string& append(const string &str, int pos, int n); //把字符串str中从pos开始的n个字符连接到当前字符串结尾
8.8 string& append(int n, char c); //在当前字符串结尾添加n个字符c
9-->交换 swap()
9.0 这是一个成员函数,this.swap(const string& str); //把字符串str与当前对象互换
10-->转换C风格字符串 this.c_str() this.data()
10.0 const char* c_str ( ) const; //返回const char*的C风格的字符串,以null结尾
10.1 //示例: 需要C风格的字符串char* str,就用this.c_str()转换。
string num = "1234567890"; strlen(num.c_str());
10.2 注意返回值是const char*,有时需要转换
void f1(char *str) { } int main() { string num = "1234567890"; f1(const_cast<char*>(num.c_str())); }
10.3 const char* data() const; //返回const char*数组,非null结尾
11——>扩展知识点:
11.0 模板
//泛型 类似C中的void* template<typename T> //T为占位符 void Swap(T& lhs,T&rhs) { T temp; temp = lhs; lhs = rhs; rhs = temp; } int main() { int num1 = 1, num2 = 2; Swap(num1, num2); }
11.1 迭代器 iterator 代表某个元素。
作业:再次完成MyString 和MyArray