STL容器---string

1、string是什么

string是专门对字符串操作的一个类。

2、string和char*的区别

char*是指向字符数组的指针,然后系统提供了一个string.h,这个头文件声明了很多字符串操作函数。

string则是一个类,这个类将以上的内容封装在一起,使得字符串的操作更灵活,方式更多、管理更灵活

string这个类。我们使用的时候不用考虑内存的分配与释放,不用担心越界崩溃。因为前辈在封装string的时候,已经把几乎所有情况都考虑到并处理了。

3、string构造函数

  • string() 无参的构造函数,示例:string str;

string类中存在一个指向字符串的指针(char* m_str)。如果调用无参的构造函数,该指针并不是指空,而是申请了一个字符的空间,写入‘\0’,即为表示一个空的字符串。具体实现类似如下:

class mystring
{
public:
	mystring()
	{
		m_str = new char('\0');
	}
	const char* c_str() const
	{
		return m_str;
	}
private:
	char* m_str;
};
  • string(size_t length, char ch),构造一个length个ch组成的字符串
string str(5, 'a');
cout << str.c_str(); //此时str为"aaaaaa",故输出aaaaaa
  • string(const char* str) 用字符串进行初始化
  • string(const char* str, size_t length) 用str的前length个字符组成字符串进行初始化
  • string(string &str, size_t index, size_t length)用str的从index开始数length个字符组成字符串进行初始化(该方法为拷贝构造)
  • string(string &str)用str构造对象

4、析构函数

string类析构函数主要需要释放装入字符串的饿空间。类似实现如下:

~mystring()
	{
		if (NULL != m_str)
		{
			delete[] m_str;
		}
	}

5、string重载的运算符

  • <<(可以通过<<直接输出string类型数据(对象))
  • >>  (输入)
  • 赋值:+=、=
  • 下标运算:[]
  • 比较:==、>、<、>=、<=、!=
  • 计算:+

6、输出

输出整个字符串:

  • 通过<<输出。
  • 通过调用c_str()成员函数进行输出。该函数的功能申请一块新的空间备份该字符串,然后返回该备份的首地址。

输出单个字符:

  • 通过 [ ] 进行输出指定字符。该方法下标越界会崩溃
  • 通过调用at(size_t index)成员函数进行输出。越界会抛出异常

7、修改

  • 修改指定元素:用[ ] 和 at()方法进行修改
  • 中间插入:insert系列方法

basic_string &insert(size_t index, const basic_string &str); //在index位置插入str

basic_string &insert(size_t index, const char* str); //在index位置插入一个字符串

basic_string &insert(size_t index1, const basic_string &str,size_t index2, size_t num); //在index1的位置插入另一对象的某一部分

basic_string &insert(size_t index, size_t num, char ch); //在index处插入num个ch

  • 尾巴插入

+= :可以拼接对象、拼接字符串

basic_string &append(const basic_string &str); //在尾部拼接一个对象

basic_string &append(const char* str); //尾部拼接一个字符串

basic_string &append(const basic_string &str, size_t index, size_t len); //拼接一个对象的某一段

basic_string &append(const char* str, size_t num); //拼接字符串前几个

basic_string &append(size_t num, char ch); //拼接num个ch

8、基本操作

  • 比较
1、比较运算符重载
> < != == >= <=
2、比较两个对象
int compare(const string &str);
3、比较一个对象和字符串
int compare(const char* str);
4、比较本对象的一段跟参数3的对象
int compare(size_t index, size_t length, const string &str);
5、比较两个对象中的一段
int compare(size_t index, size_t length, const string &str, size_t index2, size_t, length2);
  • 复制
1、将对象中的某一段复制进一个字符数组中。
size_t copy(char *str, size_t num, size_t index);
  • 查找字串
1、从指定位置开始查找str,找到就返回起始位置
size_t find(const string &str, size_t index);
2、指定位置查找一个字符串
size_t find(const char* str, size_t index);
3、指定位置开始查找字符
size_t find(char ch, size_t index);
4、返回字串,返回指定为位置的字串
substr(size_t index, size_t num);
5、交换两个对象的内容
swap(string &str);

9、迭代器

  • 定义一个迭代器
string::iterator ite;//类似于一个char*指针

  • 通过迭代器遍历string元素
string str1 = "abcdefg";
string::iterator ite;
ite = str1.begin();
for (int i = 0; i < str1.size(); i++)
{
	cout << *ite;
        //或者cout << ite[i];
	ite++;
}
  • 迭代器和指针的使用方法相同
  • 为什么要用迭代器

因为这个迭代器是要跟算法连接的,它适用于所有的容器。

  • 迭代器失效

在string重新申请内存时,迭代器失效。

string str = "abc";
string::iterator ite;
ite = str.begin();
str.append(18, 'a');

ite[3] = '3';//会出错

10、string涉及到迭代器的成员函数

1、函数返回一个迭代器,指向字符串的第一个元素
iterator begin();
2、函数返回一个迭代器,指向字符串的末尾元素(最后一个元素的下一个)
iterator end();
3、在字符串的末尾添加以迭代器start和end表示的字符串
append(iterator start, iterator end);
4、删除
iterator erase(iterator pos);//删除指定元素
iterator earse(iterator start, iterator end);//删除一段
5、插入
void insert(iterator i, size_t num, const char &h);
void insert(iterator i, iterator start, iterator end);

11、string与算法

  • 遍历
//头文件
# include<algorithm>
void fun(char c)
{
    cout << c;
}
string str("sdbdfbdawv");
for_each(str.begin(), str.end(), fun);
  • 排序
# include<algorithm>
# include<functional>//great的头文件

string str = "ddfbrgtbadf";
sort(str.begin(), str.end());//默认从小到大排序

sort(str.begin(), str.end(), greater<char>());指定从大到小排序

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值