string类(上)
创始人
2025-05-30 21:17:26
0

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++的相关知识,干货满满,如果觉得博主写的还不错的话,希望各位小伙伴不要吝啬手中的三连哦!你们的支持是博主坚持创作的动力!💪💪

相关内容

热门资讯

开学第一课最新或2023(历届...   开学第一课最新或2023(历届)英雄不朽观看心得体会【1】  这一期的《开学第一课》讲述的是抗日...
最新或2023(历届)观看开学...  最新或2023(历届)观看开学第一课直播心得体会1  今天,看了开学第一课,本次的主题是英难。我想...
开学第一课英雄不朽观后感200...  1.最新或2023(历届)《开学第一课》“英雄不朽”观后感  今天我看了以“英雄不朽”为主题的《开...
最新或2023(历届)看开学第...  最新或2023(历届)看开学第一课英雄不朽心得体会【1】  最新或2023(历届)《开学第一课》于...
最新或2023(历届)看央视《...   最新或2023(历届)看央视《开学第一课》心得体会1  今晚央视二套开播《开学第一课》。全国2....
H5CSS3第一课——CSS选... hello,时隔一年多,我再次回归了,在之前的公司因为保密协议过于严格&...
MM MIGO BAPI BA... 原文链接:https://blog.csdn.net/IamRunjiang/arti...
VR全景展会丨探索未来,重塑现... 随着科技的不断发展,虚拟现实(VR)技术逐渐成为一个重要的...
最新或2023(历届)关于开学...   1.《开学第一课》英雄不朽观后感  最新或2023(历届)9月4日,中央一台播放了由中华人民共和...
最新或2023(历届)开学第一...   《开学第一课》观后感1  今天晚上,我和爸爸妈妈怀着激动的心情,准时收看了《开学第一课》。今年是...
最新或2023(历届)开学第一...   第1篇:开学第一课英雄不朽观后感  今天,我看了开学第一课《英雄不朽》。  开学第一课一共有四节...
最新或2023(历届)开学第一...  1.英雄不朽观后感400字作文  我看了9月4日中央1套的《开学第一课》,知道了从1937年上海因...
最新或2023(历届)开学第一...   1.英雄不朽观后感作文300字  我看了9月4日中央1套的《开学第一课》,知道了从1937年上海...
超实用!!! 三分钟将你的项目... 文章目录前言一、在项目中新增配置二、配置github page setting?三、如...
Deep Learning a... 文章目录一、Deep learning attracts lots of attention.Ups...
【读论文】PIAFusion 【读论文】PIAFusion介绍网络架构光照感知网络特征提取CNN部分CMDAF图像还原损失函数总结...
中小学生安全教育专题广播稿 中...   广播稿1:  亲爱的同学们:大家好!今天是一个特殊的日子,是第16个全国中小学生安全教育日。  ...
关于运动的校园广播稿 关于体育...   《运动与健康》校园广播稿【1】  男:彩旗飘飘如一片彩色的海洋。让人欢欣鼓舞。衷心祝愿我们的运动...
公司国庆晚会主持词 公司国庆晚...  编者导语:国庆晚会是每个单位和学校都十分重视的,因为这是为了庆祝中华人民共和国的建立,人们牢记着几...
公司庆国庆晚会活动主持词 公司... 【小编导语】国庆晚会是全国各地为了庆祝国庆节的带来而举行的一场以爱国为主题的晚会。在晚会上人们载歌载...