string类(上)
创始人
2025-05-30 22:06:12

string类(上)

  • 1.标准库中的string类
  • 2.string类对象的常见构造
    • ①string()
    • ②string(const char* s)
    • ③string(size_t n,char c)
    • ④string(const string&s)
    • ⑤string(const string& str,size_t pos,size_t len=npos)
    • ⑥string(const char* s,size_t n)
  • 3.string类对象的容量操作
    • ①size
    • ②length
    • ③capacity
    • ④empty
    • ⑤clear
    • ⑥reserve
    • ⑦resize

🌟🌟hello,各位读者大大们你们好呀🌟🌟
🚀🚀系列专栏:【C++的学习】
📝📝本篇内容:标准库中的string;string类对象的常见构造;string类对象的容量操作
⬆⬆⬆⬆上一篇:C++模板初阶
💖💖作者简介:轩情吖,请多多指教(> •̀֊•́ ) ̖́-

1.标准库中的string类

string是表示字符串的字符串类
string在底层实际是:basic_string模板类的别名,typedef basic_stringstring
在使用string类时,必须包含#include头文件以及using namespace std;

2.string类对象的常见构造

①string()

构造空的string类对象,即空字符串
在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include
using namespace std;
int main()
{string s;cout << s << endl;return 0;
}

②string(const char* s)

用c-string来构造string类对象
在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include
using namespace std;
int main()
{string s("hello world");cout << s << endl;return 0;
}

③string(size_t n,char c)

string类对象中包含n个字符c
在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include
using namespace std;
int main()
{string s(10,'c');cout << s << endl;return 0;
}

④string(const string&s)

拷贝构造函数
在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include
using namespace std;
int main()
{string s(10,'c');string s1(s);string s2 = s;cout << s << endl;cout << s1 << endl;cout << s2<< endl;return 0;
}

⑤string(const string& str,size_t pos,size_t len=npos)

复制从字符位置pos开始并跨越len字符的str部分(如果str太短或len为string::npos,则复制到str结尾)
在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include
using namespace std;
int main()
{string s("hello world");string s1(s,6,5);cout << s1<< endl;return 0;
}

在这里插入图片描述
上图是文档中查到的npos,他是一个无符号的unsigned int,值又是-1,所以说它就是无符号整形的最大值,因此,当你参数len作为缺省值或者大于str的长度时,他就是复制到str结尾
在这里插入图片描述
在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include
using namespace std;
int main()
{string s("hello world");string s1(s,6);cout <

⑥string(const char* s,size_t n)

从由s指向的字符数组中复制前n个字符
在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include
using namespace std;
int main()
{string s("hello world",5);cout << s << endl;return 0;
}

3.string类对象的容量操作

①size

返回字符串有效字符长度
在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include
using namespace std;
int main()
{string s("hello world");cout << s.size()<

②length

返回字符串有效字符长度
在这里插入图片描述
和size功能一样,由于历史原因,所以说会有length,但是推荐使用size

③capacity

返回空间总大小
在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include
using namespace std;
int main()
{string s("hello world");cout << s.capacity()<

④empty

检测字符串是否为空串,是返回true,否则返回false
在这里插入图片描述
在这里插入图片描述

⑤clear

清空有效字符
在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include
using namespace std;
int main()
{string s("hello world");s.clear();cout << s.size() << endl;cout << s.capacity() << endl;return 0;
}

可以看出clear只是清空有效字符,但不会缩容

⑥reserve

为字符串预留空间
在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include
using namespace std;
int main()
{string s("hello world");s.reserve(100);cout << s.size() << endl;cout << s.capacity() << endl;return 0;
}

可以把空间提前开大,但是打印出来的capacity大小并不是所设置的,这是因为还存在编译器对齐等各种原因,但是无论怎么样,开出的空间肯定大于等于你所设置的参数

⑦resize

将有效字符的个数改成n个,多出的空间用字符c填充
在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include
using namespace std;
int main()
{string s("hello world");s.resize(20,'c');cout << s.size() << endl;cout << s.capacity() << endl;cout << s << endl;return 0;
}

注意:
1.size()和length()方法底层实现完全原理完全相同,引入size()的原因是为了与其他容器的接口保持一致,一般情况下基本都是使用size()
2.clear()只是将string中有效字符清空,不改变底层空间大小
3.resize(size_t n)与resize(size_t n,char c)都是将字符串中有效字符个数改变到n个,不同的是当字符个数增多时:resize是用0来填充多出的元素空间,resize(size_t n,char c)是用字符c来填充多出的元素空间。注意:resize在改变元素个数时,如果将元素个数增多,可能会改变底层容量大小,如果是将元素个数减少,底层空间总大小不变
reserve(size_t res_arg=0):为string预留空间,不改变有效元素个数,当reserve的参数小于string的底层空间总大小时,reserve不会改变容量大小。知道需要多少空间,提前开空间,减少扩容,提高效率

当resize没给第二个参数时:
在这里插入图片描述
当resize的参数小于字符串有效长度时:
在这里插入图片描述
可以看出resize的参数小于字符串有效字符时,会进行清除字符

🌸🌸string类(上)的知识大概就讲到这里啦,博主后续会继续更新更多C++的相关知识,干货满满,如果觉得博主写的还不错的话,希望各位小伙伴不要吝啬手中的三连哦!你们的支持是博主坚持创作的动力!💪💪

相关内容

热门资讯

刷题之-剑指 Offer II... 最近很久没刷题了,面试官给了这么一道题,只给10分钟时间,...
Nginx代理后获取客户端真实... 1、场景 在项目实际应用中,我们可能会需要获取到用户也就是客户端的真实IP地址...
第十三届蓝桥杯省赛 pytho... 文章目录前言主要内容🦞试题 A:排列字母思路代码🦞试题...
阿里春招-2023.3.15-... 极差三元组计数 Problem Description 给定一个数组,请你计算有多少个...
电压放大器在钢筋剥离损伤识别试...   实验名称:钢筋剥离损伤识别试验  研究方向:无损检测  测试目的&#...
MOCO论文前几段精读 MoCo MoCo是CVPR 2020的最佳论文提名,算是视觉领域里,使...
【lua初级篇】基础知识和开发... 文章介绍 文章介绍 简述 工具安装配置和下载 快速看基础知识 一些常用的关键字一览 数据类型 tab...
Yuv422、Nv12转C#B... 1.1、Nv12转Bitmapint w = 1920;int h = 1080;i...
Linux互斥量和信号量的区别... 互斥量和信号量的区别 1.互斥量用于线程的互斥: 互斥:加锁解锁,是指某...
Git 和 GitHub 超入... 1.解决行结束符问题 需要在你的仓库中添加一个.gitattributes文件,标记正...
基于C++的AI五子棋游戏项目... 项目资源下载 基于C++的AI五子棋游戏项目源码压缩包下载地址基于C+...
#浅聊 webSocket (... 如果可以实现记得点赞分享,谢谢老铁~ 一,什么是webso...
Java SE API kno... Java SE API know how 字符串 紧凑字符串 java8 无论字符串的编码ÿ...
常用的VB函数 数学函数函数说明示例Sin(N)返回自变量N的正弦值Sin(0)=0 N为弧度Cos(N)返...
C++ 机房预约系统(五):管... 7.3 显示功能 功能描述: 显示学生信息或教师信息 功能实现: voi...
PIC单片机的一些问题 error 1347 can't find 0x16 words (0x16 withtotal) ...
完美日记母公司再度携手中国妇基... 撰稿 | 多客 来源 | 贝多财经 当春时节,梦想花开。和煦的三月暖阳,...
GDPU C语言 天码行空3 1. 分段函数 #includeint main(){double x,y;scanf("%lf",...
【瑞萨 MCU】开发环境搭建之... e2 studio e2 studio(简称为 e2 或 e2s)是瑞萨...
C语言内联汇编 之前我们介绍了一种C语言与汇编代码混合编程方式,就是两个文件分开编写,分...
Linux 网络编程学习笔记—... 一、TCP 服务的特点 传输层协议主要有 TCP 协议和 UDP 协议,前者相对于后者...
KubeSphere All ... KubeSphere All in one安装配置手册 1. 初始化 1.1 配置apt源 # vi...
学习软件测试怎么能缺少练手的软... 你好,我是凡哥。 最近收到许多自学自动化测试的小伙伴私信,学习了理论知识...
【面试题】浅谈css加载是否会... 大厂面试题分享 面试题库前后端面试题库 (面试必备) 推荐:...
直播带货系统开发的关键点、代码... 时下,直播的热度依然不减,而它的产物之一:直播带货系统&#...
一文读懂强化学习! 一.了解强化学习1.1基本概念强化学习是考虑智能体(Agent)与环境&...
Spring Cloud之一:... 目录 环境 Eureka工程的创建步骤 系列目录(持续更新。。。) S...
golang实现守护进程(2) 前言golang实现守护进程,包含功能:1. 守护进程只创建一次2. 平...
url 格式详解 统一资源定位系统(uniform resource locator; url ...
elasticsearch7.... elasticsearch版本:7.17.3 目标:实现对类型为text...