当前位置:   article > 正文

【C++修炼之路 第五章】string 类:讲解各种常用的函数操作

【C++修炼之路 第五章】string 类:讲解各种常用的函数操作

在这里插入图片描述



  本文讲解 string 类中,最为常用的一些函数,string 类中还有一些其他的 操作,本文不一一列举,大家在需要用到时不明白了查文档即可。(要学会查文档)



1、为什么学习string类?

0. 前言

从本章开始就正式开始学习 各种 STL,就要学会看文档了

不读第一手英文文档,有很多东西是使用翻译器 get 不到的

1.1 C语言中的字符串

  C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,
  但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。
  在OJ中,有关字符串的题目基本以string类的形式出现,而且在常规工作中,为了简单、方便、快捷,基本都使用string类,很少有人去使用C库中的字符串操作函数。




2. 标准库中的string类


string类的文档介绍

2.1 string类对象的常见构造

函数名称功能说明
string()构造空的string类对象,即空字符串
string(const char* s)用 C语言 char* 类型字符串 构造string类对象
string(const string&s)拷贝构造函数
void Teststring()
{
    string s1; // 构造空的string类对象s1
    string s2("hello bit"); // 用C格式字符串构造string类对象s2
    string s3(s2); // 拷贝构造s3
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.2 string类对象的容量操作


函数名称功能说明
size返回字符串有效字符长度
length返回字符串有效字符长度
capacity返回空间总大小(当前全部空间)
empty检测字符串是否为空串,是返回true,否则返回false
clear清空有效字符
reserve为字符串预留空间(改变 capacity, 不可改变 size)
resize ( size_t n, char c )将有效字符的个数该成 n 个,多出的空间用字符 c 填充(可改变 size )

(1)关于 size


  size () 与 length () 方法底层实现原理完全相同,引入size()的原因是为了与其他容器的接口保持一致,一般情况下基本都是用 size()

(2)关于 clear


clear() 只是将 string 中有效字符清空不改变底层空间大小。

(3)关于 resize


resize (size_t n) 与 resize (size_t n, char c) 都是将字符串中有效字符个数改变到 n 个

不同的是当字符个数增多时:

resize(n)用 0 来填充多出的元素空间,

resize(size_t n, char c) 用字符 c 来填充多出的 元素空间。

  注意:resize 在改变元素个数时,如果是将元素个数增多,可能会改变底层容量的大小,如果是将元素个数减少,底层空间总大小不变。(这里和 缩容有关)

关于 reserve 和 resize ,本篇博客有细致讲解:string 扩展空间规律 + reserve 的缩容和使用规律 + resize 的使用




2.3 string 类对象的访问及遍历操作


函数名称功能说明
operator[]返回 pos 位置的字符,使 string 可以像数组一样访问
begin + end(正向遍历)begin 获取一个字符的迭代器 + end 获取最后一个字符下一个位置的迭代器
rbegin + rend反过来遍历
范围 for 循环C++11的语法:底层还是 迭代器begin + end
at功能和 operator[] 一样,但这个会捕获越界异常提醒你

2.3.1 几种遍历 string 的方式


(1)重载 [] :模拟数组

string 重载了 operator[] :字符串 string 可以像数组一样遍历

在这里插入图片描述


在 string 的库中还重载了一个 const 类型的

因为可能你传过来的字符串是用 const 修饰不能修改



在 库的string 底层类似于这样:(实际上有些差别)


class string
{
public:
	char& operator[](size_t i) { 
		assert(i < _size);
		return _str[i];
	}
private:
	char* _str;
	size_t _size;
	size_t _capacity;
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/913235
推荐阅读
相关标签