string类的基本函数

20 阅读2分钟

前言: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;