前言:string是一个类,而非一个数据类型。这个类其实和顺序表的实现非常相似。它的成员变量有一个指向正文数据区的指针、一个存储正文数据区最大容量的capacity(防止访问越界)、一个表示尾插的下标和当前数据区内字符个数的len。string类的成员变量如下:
class string{
private:
char* data;
size_t capacity;
size_t len;
};
基本函数:这里我按照增删改查的顺序进行一一介绍
增:思考一下,怎么向一片连续的内存空间中写入数据呢?首先应该能够想到的就是,这个类的构造函数。其次就是插入,在尾部/指定位置插入单字符/连续字符。
1.构造函数:
string str(const char*str);
string str(size_t count,char ch);
2.从数据流中接收数据:
cin:接受数据直到遇到空格
cin>>str;
getline:接受数据直到遇到换行符'\n'
istream& getline(std::cin,str);//标准输入流
istream& getline(ifstream ifp,str);//文件流
3.插入操作:插入这块我分函数来讲
insert:指定位置插入
str.insert(size_t index,const char* str);
str.insert(size_t index,const string& str);
str.insert(size_t index,size_t count,char ch);
push_back:尾插字符
str.push_back(char ch);
append:尾插字符串
str.append(const char* str);
str.append(size_t count,char ch);
运算符+的重载
string& operator+=(const char *str);
string& operator+=(const string &str);
string& operator+=(char ch);
删:删除操作没有增这么多,只有一个尾删pop_back和从指定位置开始删除指定位数的数据erase
pop_back:尾删
str.pop_back();
erase:从指定位置开始删除指定个数的数据(有边界检查)
str.erase(size_t index,size_t count);
改:修改只有一个replace函数
replace:从指定位置开始,删除指定个数的元素,再将新数据插入
str.replace(size_t index,size_t count,const char *str);
str.replace(size_t index,size_t count,const string *str);
查:查找功能主要是find函数和compare函数
find:返回第一个匹配的数组下标位置
size_t find(char ch,size_t index) const;
size_t find(const char *str,size_t index) const;
size_t find(const string &str,size_t index) const;
compare:返回比较结果,0为相同,或者返回第一个字符的ASCII码比较结果-1/1
int compare(const char *str) const;
int compare(const string &str) const;
输出:cout,直接输出正文数据区的字符,直到len==capacity
cout<<str;