🎶string - 字符串

STL中string类的详细介绍

string 容器基本概念

C风格字符串(以\0结尾的字符数组)太过复杂,难于掌握,不太适合大程序的开发,所以C++STL中定义了一种string类,在头文件<string>中。

string 和 C风格字符 串对比

  • char*是一个指针,string是一个类

    string封装了char*,管理这个字符串,是一个char*型的容器。

  • string 封装了很多实用的成员方法

    查找find,拷贝copy,删除erase,替换replace,插入insert......

  • 不用考虑内存释放和越界

    string管理char*所分配的内存,每一次string的复制/赋值,取值都由string类负责维护,不用担心复制越界和取值越界等。

string 本质上是一个动态的char数组。

string 容器常用操作

string 构造函数

string 基本赋值操作

= 赋值操作符

assign成员函数

string 存取字符操作

[]下标获取操作符

使用下标操作符获取字符时,如果下标越界,程序将会强制终止。

at成员函数

使用at方法获取字符时,如果下标越界,at方法内部会抛出异常(exception),可以使用try-catch捕获并处理该异常。示例如下:

string 拼接操作

+=复合操作符

append成员函数

string 查找和替换

find成员函数

当查找失败时,find方法会返回-1-1已经被封装为string的静态成员常量string::npos

rfind成员函数

find方法通常查找字串第一次出现的位置,而rfind方法通常查找字串最后一次出现的位置。

rfind(str, pos)的实际的开始位置是pos + str.size(),即从该位置开始(不包括该位置字符)向前寻找匹配项,如果有则返回字符串位置,如果没有返回string::npos

-1其实是size_t类的最大值(学过补码的同学应该不难理解),所以string::npos还可以表示“直到字符串结束”,这样的话rfind中pos的默认参数是不是就不难理解啦?

replace成员函数

string 比较操作

compare成员函数

compare函数依据字典序比较,在当前字符串比给定字符串小时返回-1,在当前字符串比给定字符串大时返回1,相等时返回0

比较操作符

string类重载了所有的比较操作符,其含义与比较操作符本身的含义相同。

string 子串

substr成员函数

string 插入和删除操作

insert 成员函数

返回值是插入后的字符串结果,erase同理。其实就是指向自身的一个引用。

erase 成员函数

默认一直删除到末尾。

stringC-Style 字符串的转换

stringconst char*

const char*string

在c++中存在一个从const char*string类的隐式类型转换,但却不存在从一个string对象到const char*的自动类型转换。对于string类型的字符串,可以通过c_str()方法返回string对象对应的const char* 字符数组。

比如说,当一个函数的参数是string时,我们可以传入const char*作为参数,编译器会自动将其转化为string,但这个过程不可逆。

为了修改string字符串的内容,下标操作符[]at都会返回字符串的引用,但当字符串的内存被重新分配之后,可能发生错误。(结合字符串的本质是动态字符数组的封装便不难理解了)

和 string 相关的全局函数

注:有的可能需要C++11标准。

大小写转换

如果想要对整个字符串进行大小写转化,则需要使用一个for循环,或者配合和algorithm库来实现。例如:

字符串和数字的转换

int/doublestring

c++11标准新增了全局函数std::to_string,十分强大,可以将很多类型变成string类型。

stringdouble / int

与之类似的在同一个库里的还有一组基于字符数组的函数如下。

最后更新于

这有帮助吗?