在B站听黑马程序员c++课程的记录
一些知识点
- 本质:是一个类,封装了char*。
- 特点:管理char*字符串,同时内部有很多的成员方法,可以更方便的操作字符串。类的内部直接对char*分配的内存进行管理,使用时不必担心越界等等。
构造函数的使用
- 创建空字符串,调用无参构造函数string();
string s1;
- 使用字符串s初始化 string(const char* s);
const char* str = "hello world";
string s2(str);
- string对象赋值给另一个string对象 即拷贝构造函数 string(const string& str)
string s3(s2);
- 生成n个c string(int n, char c)
string s4(10, 'a');
赋值
前四种用operator重载=运算符,后三种用成员函数assign()
- string& operator=(const char* s);
str1 = "hello world";
- string& operator=(const string &s);
str2 = str1;
- string& operator=(char c);
str3 = 'a';
- string& assign(const char *s);
str4.assign("hello c++");
- 前5个字符 str5=“hello” string& assign(const char *s, int n);
str5.assign("hello c++",5);
- string& assign(const string &s);
str6.assign(str5);
- string& assign(int n, char c)
str7.assign(5, 'x');
str7 = “xxxxx”
拼接
前三种用operator重载+=运算符,后四种用成员函数append()
string& operator+=(const char* str);
// 重载+=操作符 str1 += “lalall”string& operator+=(const char c);
//重载+=操作符 str1 += char1string& operator+=(const string& str);
//重载+=操作符 str1 += str2string& append(const char *s);
//把字符串s连接到当前字符串结尾 str3.append(" love ");string& append(const char *s, int n);
//把字 字符串s的前n个字符连接到当前字符串结尾string& append(const string &s);
//同operator+=(const string& str)string& append(const string &s, int pos, int n);
//字符串s中从pos开始的n个字符连接到字符串结尾str3.append(str2, 4, 3);
查找和替换
返回值int是找到的第一个字符下标,从0开始算起。
如果找不到返回值为-1。
int find(const string& str, int pos = 0) const;
//查找str第一次出现位置,从pos开始查找int find(const char* s, int pos = 0) const;
//查找s第一次出现位置,从pos开始查找int find(const char* s, int pos, int n) const;
//从pos位置查找s的前n个字符第一次位置int find(const char c, int pos = 0) const;
//查找字符c第一次出现位置
rfind和find的区别:
find从左往右查找,rfind从右往左查找。int rfind(const string& str, int pos = npos) const;
//查找str最后一次位置,从pos开始查找int rfind(const char* s, int pos = npos) const;
//查找s最后一次出现位置,从pos开始查找int rfind(const char* s, int pos, int n) const;
//从pos查找s的前n个字符最后一次位置int rfind(const char c, int pos = 0) const;
//查找字符c最后一次出现位置
如果n>str的长度,替换的长度实际为str的长度。string& replace(int pos, int n, const string& str);
//替换从pos开始n个字符为字符串strstring& replace(int pos, int n,const char* s);
//替换从pos开始的n个字符为字符串s
比较
字符串比较是按字符的ASCII码逐位进行对比,先遇到哪一位的ASCII码大就是哪一个字符串大.
= 返回 0
> 返回 1
< 返回 -1
int compare(const string &s) const;
//与string s比较 str1.compare(str2)int compare(const char *s) const;
//与char* s比较
字符存取 访问
通过[]方式和at方法
char& operator[](int n);
//通过[]方式取字符char& at(int n);
//通过at方法获取字符
使用: str[i]、str.at(i)
插入和删除
string& insert(int pos, const char* s);
//在pos位置开始 插入字符串sstring& insert(int pos, const string& str);
//在pos位置开始 插入字符串strstring& insert(int pos, int n, char c);
//在在pos位置开始 插入n个字符cstring& erase(int pos, int n = npos);
//删除从Pos开始的n个字符
截取子串
string substr(int pos = 0, int n = npos) const;
//返回由pos开始的n个字符组成的字符串
str = “12345”
string subStr = str.substr(1, 3);
运行结束后subStr的结果为str的第一个位置开始的3位子串"234"