【C++】STL之string类(1)

这篇具有很好参考价值的文章主要介绍了【C++】STL之string类(1)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

个人主页:平行线也会相交💪
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创
收录于专栏【C++之路】💌
本专栏旨在记录C++的学习路线,望对大家有所帮助🙇‍
希望我们一起努力、成长,共同进步。🍓
【C++】STL之string类(1)

前言

接下来就开始STL部分的学习了,本文先来学习一下C++中STL的string类

一、什么是string类

首先,string类是一个管理字符串的类。在日常中,字符串中是非常常见的,但凡是复杂一点的类型,都需要用字符串来进行展示。

在C语言中,我们学习了strxxx的库函数(管理字符串),但是其实C语言中strxxx的库函数不是很好,因为C语言中str系列的库函数只能对字符串进行一些简单的操作,比如说求字符串的长度,字符串的拷贝,很明显不能满足我们日常的需求。

而在C++中的string类中,我们可以对字符串进行各种增删查改和一些算法操作。日常中一些很复杂的信息都是用字符数组来进行展示的,故C++中的string类就是用来管理字符数组的

这里推荐一下学习C++文档的网址:

网址1
网址2(推荐用网址2),ctrl+F进行搜索。

二、标准库中的string类

【C++】STL之string类(1)

我们如果想要使用string类的话就需要包头文件,STL本身就属于C++标准库中的一部分,而标准库中的内容都在std的命名空间中
所以如果我们想要使用string类的话,我们可以展开std的命名空间(即string s1),如果我们不展开std的命名空间的话,我们可以这样使用:std::string s2
我们先来简单使用一下string类:

#include<iostream>
using namespace std;

int main()
{
	string s1;//展开了命名空间就是这样使用
	std::string s2;//没有展开命名空间就这样使用就可以

	std::string name("李四");
	name = "李四";
	return 0;
}

这里是string类的成员函数,其实就是string类的默认成员函数
【C++】STL之string类(1)
我们可以看到这里constructor中实现了7个构造函数,请看:
【C++】STL之string类(1)
我们在来看destructor中的析构函数,请看:
【C++】STL之string类(1)
我们在来看operator=中里一共有3个赋值运算符重载,请看:
【C++】STL之string类(1)

三、string类的常用接口说明

(1)string类中的常见构造

3.1默认构造函数(string())

string str:创建一个空字符串对象
【C++】STL之string类(1)

3.2字符指针构造函数(string(const char* s))

字符指针构造函数:从一个指向字符串的字符指针str中创建字符串对象。

const char *s = "Hello, World!";
string str(s); // 字符指针创建字符串

【C++】STL之string类(1)

3.3字符构造函数(string str(“hello”)😉

字符构造函数:一组字符创建字符串对象,比如string str("hello");
【C++】STL之string类(1)

3.4重复字符构造函数(string s(size_t n, char c))

重复字符构造函数(string s(size_t n, char c)):创建一个包含n个字符c的字符串对象。第一个参数是所需长度,第二个参数是重复的字符。

比如:string str(5, 'x'); // 创建一个包含5个重复字符'x'的字符串
【C++】STL之string类(1)

3.5拷贝构造函数(string::string(const string& str);)

重复构造函数:从一个已存在的字符串对象创建新的字符串对象。
语法:string::string(const string& str);
拷贝构造函数的参数是一个常量引用,它引用了要被复制的字符串对象。拷贝构造函数会创建一个新的字符串对象,该对象的内容与被复制的字符串对象相同。

请看举例: 【C++】STL之string类(1)

3.6 构造函数截取子串string(const string& str, size_t pos, size_t len = npos);

string(const string& str, size_t pos, size_t len = npos)是字符串类std::string的构造函数之一,它有三个参数

  • const string& str:一个常量引用,表示要从中截取子串的原字符串。
  • size_t pos:一个整数,表示从哪个位置开始截取子串。
  • size_t len = npos:一个整数,表示要截取的子串的长度,默认值为std::string::npos,表示截取从pos开始到结尾的所有字符。

该构造函数的作用:创建一个新的字符串对象,其中包含从原字符串的pos位置开始,长度为len的子串。如果len没有指定或者指定为std::string::npos,则截取到原字符串的结尾。

例如:假设有一个字符串str=“Hello,
world!”,我们想要从中截取子串"world",可以通过如下方式使用该构造函数:std::string sub_str(str, 7, 5); // 从位置7开始截取长度为5的子串

其中,7表示从第8个字符开始,5表示指定的子串长度。在这个例子中,sub_str 的值为 “world”。

需要注意的是,在使用该构造函数时,pos和len都必须是有效的,否则可能导致未定义的行为。例如,如果len的值超过原字符串的长度,可能会访问非法内存。为了避免这种情况,可以使用std::string::substr()函数来截取子串。

string (const string& str, size_t pos, size_t len = npos);
【C++】STL之string类(1)
这里npos是什么呢?我们来看一下:
【C++】STL之string类(1)

npos是一个静态成员变量
【C++】STL之string类(1)
【C++】STL之string类(1)

再举一些比较有趣的例子,请看:
【C++】STL之string类(1)

字符串的比较

现在来看一下比较字符串的内容,请看:
【C++】STL之string类(1)
【C++】STL之string类(1)

好了,以上就是string类中的常见的默认构造函数,用到比较多的构造函数:无参的构造,带参的字符串构造和拷贝构造。

(2)std::string类的析构函数

std::string类的析构函数会自动释放字符串所占用的内存,其定义如下:

~string();

因为std::string类是基于动态内存分配来实现字符串的,因此在对象被销毁时,它所占用的内存也需要被释放。std::string类的析构函数会自动调用delete[]来释放动态分配的内存,确保不会出现内存泄漏的情况。

需要注意的是,当在std::string对象的作用域结束时,析构函数会被自动调用,对应的内存也会被释放。在删除对象时,不需要显式调用析构函数。

(3) string类对象的修改操作

push_back()

push_back():用于在字符串的末尾添加一个新的字符。
例如:

string str = "hello";
str.push_back('!');
// 现在str的值为 "hello!"。

append()

append():用于在字符串的末尾添加新的字符或字符串。
例如:

string str = "hello";
str.append(" world");
// 现在str的值为 "hello world"

【C++】STL之string类(1)

operator+=

operator+=:在字符串后追加字符串str。
【C++】STL之string类(1)
【C++】STL之string类(1)

(4)string类对象的访问及遍历操作

operator[]

【C++】STL之string类(1)

operator[]:用于访问字符串中每一个字符的下标运算符。
第一种语法:用于非常量对象,返回一个指向字符串中位置 pos 的字符的引用。可以对该引用进行修改,从而改变字符串中该字符的值。

【C++】STL之string类(1)
【C++】STL之string类(1)
第二种语法:用于常量对象,返回一个指向字符串中位置 pos 的字符的常引用。由于该引用是常量引用,因此不能对它进行修改,只能用于读取字符串中的字符。
【C++】STL之string类(1)
这里我们表面上看着str1[0]++str2[0]++是一样的,但实际上是不一样的。
【C++】STL之string类(1)

迭代器的小拓展

下面是迭代器的一个小拓展,这里先了解一下:
【C++】STL之string类(1)
【C++】STL之string类(1)
我们也可以对迭代器进行修改,请看:
【C++】STL之string类(1)

范围for底层就是一个迭代器:
【C++】STL之string类(1)

任何容器都支持迭代器

int main()
{
	list<int> lt;
	lt.push_back(520);
	lt.push_back(521);
	lt.push_back(522);
	lt.push_back(523);
	list<int>::iterator lit = lt.begin();
	while (lit != lt.end())
	{
		cout << *lit << ' ';
		lit++;
	}
	cout << endl;
	return 0;
}

【C++】STL之string类(1)

总结一下
迭代器是一个像指针一样的类型,有可能是指针,有可能不是指针。
iterator提供了一种统一的方式来访问修改容器的数据。
算法可以通过迭代器去修改容器中的数据。

好了,本文就到这里了,主要介绍了string类中的常见接口函数。算是打开了string类的一个大门。
一起加油吧,各位友友们!再见啦!!!
【C++】STL之string类(1)文章来源地址https://www.toymoban.com/news/detail-513043.html

到了这里,关于【C++】STL之string类(1)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++】STL——string(两万字详解)

    🎇C++学习历程:STL——string学习 博客主页: 一起去看日落吗 持续分享博主的C++学习历程 博主的能力有限,出现错误希望大家不吝赐教 分享给大家一句我很喜欢的话: 也许你现在做的事情,暂时看不到成果,但不要忘记,树🌿成长之前也要扎根,也要在漫长的时光🌞中沉

    2024年01月25日
    浏览(36)
  • 【C++】STL之string类(1)

    个人主页:平行线也会相交💪 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【C++之路】💌 本专栏旨在记录C++的学习路线,望对大家有所帮助🙇‍ 希望我们一起努力、成长,共同进步。🍓 接下来就开始STL部分的学习了,本文先来学习一下

    2024年02月11日
    浏览(33)
  • 【C++ • STL】探究string的源码

    ヾ(๑╹◡╹)ノ\\\" 人总要为过去的懒惰而付出代价 ヾ(๑╹◡╹)ノ\\\" 浅拷贝 :也称位拷贝,编译器只是将对象中的值拷贝过来。如果对象中管理资源,最后就会导致多个对象共享同一份资源,当一个对象销毁时就会将该资源释放掉,而此时另一些对象不知道该资源已经被释放,

    2024年02月08日
    浏览(27)
  • 【C++精华铺】9.STL string

    目录 1. string类的优势 2. string类的常用接口 2.1 常用构造 1. 空串构造:string(); 2. C串构造:string(const char* s); 3. 拷贝构造:string(const string str); 4. 字符填充构造:string(size_t n, char c); 5. 迭代器构造:string(InputIterator first, InputIterator last); 2.2  string容量操作 1. size_t size(),size_t length

    2024年02月11日
    浏览(25)
  • C++ [STL之string模拟实现]

    本文已收录至《C++语言》专栏! 作者:ARMCSKGT 前面我们介绍了STL容器string的部分接口使用,有了string使我们对字符串的操作如鱼得水,其实string不止于使用方便,其实现也有许多我们值得学习的地方,本节将为您介绍string常用接口的代码实现! 本文接口的实现借助于C++官方

    2024年02月05日
    浏览(32)
  • 【C++】STL之string类(2)

    个人主页:平行线也会相交💪 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【C++之路】💌 本专栏旨在记录C++的学习路线,望对大家有所帮助🙇‍ 希望我们一起努力、成长,共同进步。🍓 reverse :在不改变字符串内容的前提下,预留一定的

    2024年02月12日
    浏览(25)
  • C++STL详解 string【C++】

    函数模板是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数的模具。所以其实模板就是将本来应该我们做的重复的事情交给了编译器 在编译器编译阶段,对于模板函数的使用,编译器需要根据传入的实参类型来推演生成对应类型的函数以供调用。比

    2024年02月08日
    浏览(45)
  • 【C++入门到精通】C++入门 —— string类(STL)

    目录 一、STL简介  1.STL是什么 2.STL的内容  3.STL的使用前提 二、string类 1.string类 是什么 2.string类的特点和操做 ⭕构造和初始化 ⭕字符串大小和容量 ⭕字符访问和修改 ⭕字符串连接和拼接 ⭕子串操作 ⭕字符串比较 ⭕字符串修改 ⭕获取字符的ASCII码 ⭕字符串大小写转换:

    2024年02月14日
    浏览(27)
  • 【C++初阶】8. STL初阶 + String类

    STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗 数据结构与算法的软件框架 。 原始版本 Alexander Stepanov、Meng Lee 在 惠普实验室 完成的原始版本,本着开源精神,他们声明允许任何人任意运用、拷贝、修改、传播

    2023年04月08日
    浏览(35)
  • c++学习:STL之string类初识

    目录 1.关于STL 1.什么是STL 2.STL的六的组件 2.关于string类的学习 1.为何学习string类 2.何为string类 3.string类对象的构造 4.容量操作  5.元素访问的操作 6.迭代器(Iterators) 7.修改类的操作  8.字符串操作 STL(standard template library-标准模板库):是c++标准库的重要组成部分,不仅是一

    2024年02月03日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包