【C++】零基础学好string类的各种接口这一篇就够了

20 篇文章 3 订阅
订阅专栏

string常见构造(初始化)

在使用string类时,必须包含#include头文件以及using namespace std

  1. string()(常用)
  2. string(const char*s)(常用)
  3. string(const string&s)(常用)
  4. string(size_t n, char c)
  5. string (const char*s, size_t n);
  6. string (const string& str, size_t pos, size_t len = npos);
#include <iostream>
#include <string>
using namespace std;
int main()
{
	string s1;                  // 1.构造空的string类对象s1
	string s2("hello world");   // 2.用C格式字符串构造string类对象s2
	string s3(s2);              // 3.拷贝构造s3
	string s4(5, 'h');          // 4.string类对象s4中包含n个字符c
	string s5("hello world", 5);// 5.s5是从这个字符串头开始复制5个字符过去
	string s6(s2, 2, 5);        // 6.s6是从s2中下标2开始复制5个字符过去
	return 0;
}

在这里插入图片描述

能够直接使用cout打印string类,是因为有 流插入<< 和 流提取>> 的运算符重载

如何遍历string

  1. 通过下标遍历
    在这里插入图片描述
    string类运算符重载过 [ ] 所以可以直接像数组一样使用下标访问
int main()
{
	string s("1234");
	for (int i = 0; i < 4; i++)
	{
		cout << s[i] << ' ';
	}
}

在这里插入图片描述

  1. 使用范围for遍历
int main()
{
	string s("1234");
	for (auto& ch : s)
	{
		cout << ch << ' ';
	}
}

在这里插入图片描述

  1. 使用迭代器遍历

迭代器iterator的工作原理行为上类似指针,底层可能是由指针实现的,但不能说他就是指针

int main()
{
	string s("1234");
	string::iterator it = s.begin();
	while (it != s.end())
	{
		cout << *it << ' ';
		it++;
	}
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
迭代器遍历的方法是一种通用的方法,在string vector list map等等里面只要支持迭代器,就可以使用迭代器遍历

iterator迭代器

Iterators功能
begin正向初始迭代器(有const形式)
end正向结尾迭代器(有const形式)
rbegin反向初始迭代器(有const形式)
rend反向结尾迭代器(有const形式)
cbegin(C++11)C++11的const正向初始迭代器
cend (C++11)C++11的const正向结尾迭代器
crbegin(C++11)C++11的const反向初始迭代器
crend(C++11)C++11的const反向结尾迭代器

begin与end

在这里插入图片描述

  • 普通形式(可读可写)
int main()
{
	string s("1234");
	string::iterator it = s.begin();
	while (it != s.end())
	{
		cout << *it << ' ';
		it++;
	}
}
  • const形式(可读不可写)
int main()
{
	string s("1234");
	string::const_iterator it = s.begin();
	while (it != s.end())
	{
		cout << *it << ' ';
		it++;
	}
}

在这里插入图片描述

rbegin与rend

反向迭代器,就是从结尾开始,结尾是rbegin,向前遍历,头位置是rend
在这里插入图片描述

在这里插入图片描述

  • 普通形式(可读可写)
int main()
{
	string s("1234");
	string::reverse_iterator it = s.rbegin();
	while (it != s.rend())
	{
		cout << *it << ' ';
		it++;
	}
}

在这里插入图片描述

  • const形式(可读不可写)
int main()
{
	string s("1234");
	string::const_reverse_iterator it = s.rbegin();
	while (it != s.rend())
	{
		cout << *it << ' ';
		it++;
	}
}

在这里插入图片描述
C++11支持的cbegin cend crbegin crend使用方法差不多,它们就是const版本的只能读不能写,只有一个版本
在这里插入图片描述

Capacity容量操作

函数名功能
size返回字符串有效字符长度
length返回字符串有效字符长度
capacity返回开辟的空间大小
max_size返回字符串的最大大小(固定值一般是2^32)
empty判断字符串是否为空串,是返回true,否则返回false
clear清空有效字符(不会改变capacity的大小)
reserve为字符串预留空间,更改容量大小
resize改变字符串大小(长度)
shrink_to_fit(C++11)请求字符串减小其容量以适应其大小

在这里插入图片描述

  • reserve

在这里插入图片描述

  • resize
    在这里插入图片描述
    resize有三种情况:
    1. n<原始长度
      在这里插入图片描述

    2. 原始长度<n<capacity
      在这里插入图片描述

    3. n>capacity
      在这里插入图片描述

  • shrink_to_fit
    它的作用是比如一个字符串开辟了100个字节的空间,但是他可能只需要10个字节存储数据,那么shrink_to_fit的作用就是将容量更改为10个字节,减小原空间的大小去适应需要的空间大小

operator+=(尾插)

在这里插入图片描述
在这里插入图片描述

push_back(尾插)

在这里插入图片描述
在这里插入图片描述

append(尾插)

通过在当前值的末尾附加额外的字符来扩展字符串

在这里插入图片描述
在这里插入图片描述

insert(输入位置插入)

在某一位置插入字符或字符串

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

erase(选择删除)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

pop_back(尾删C++11)

删除字符串的最后一个字符,有效地将其长度减少1

在这里插入图片描述

在这里插入图片描述

find(从前往后查找)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

rfind(从后往前查找)

rfind就是从后向前查找,使用方法与find没啥区别

在这里插入图片描述

在这里插入图片描述

assign(删除自身再替换)

为字符串赋一个新值,替换其当前内容(先删除自己的然后替换成别人的)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

replace(选择替换)

用新内容替换字符串中以pos字符开始、跨度为len字符的部分(或在[i1,i2)范围内的部分)

在这里插入图片描述
在这里插入图片描述
第三个与第一个是类似的,第三个是直接传C字符串,第一个是传对象
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

字符串操作

c_str(获得字符串)

返回一个指向数组的指针,该数组包含以空结束的字符序列(即C-string),表示字符串对象的当前值

在这里插入图片描述
在这里插入图片描述
还可以打印文件:

int main()
{
	string file("Test.cpp");
	FILE* fout = fopen(file.c_str(), "r");
	assert(fout);

	char ch = fgetc(fout);
	while (ch != EOF)
	{
		cout << ch;
		ch = fgetc(fout);
	}
	fclose(fout);
	return 0;
}

在这里插入图片描述

substr(获得原字符串字串)

返回一个新构造的字符串对象,其值初始化为该对象的子字符串的副本

在这里插入图片描述
在这里插入图片描述
思考题:取出文件的后缀名

int main()
{
	string s("Test.cpp");
	size_t pos = s.rfind('.');
	if (pos != string::npos)
	{
		string suffix = s.substr(pos);
		cout << suffix << endl;
	}
	return 0;
}

在这里插入图片描述

getline(字符串输入)

跟cin作用类似,只不过它可以传空格等字符,而cin不行

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

swap(字符串交换)

交换函数

可以直接交换对象或者单个字符
在这里插入图片描述
在这里插入图片描述

compare(字符串比较)

字符串比较函数(用的不多)一般直接使用 > < = 等运算符

在这里插入图片描述
在这里插入图片描述
C++的string类重载了很多比较的操作符,所以可以直接使用别的方法比较比如 [ ]+下标:
在这里插入图片描述
在这里插入图片描述

reverse(字符串逆置)

这个函数需要引用头文件 #include “algorithm”

在这里插入图片描述
在这里插入图片描述

【Java基础知识 1】Java入门级概述
学Java,找哪吒
09-25 15万+
CSDN最强Java专栏,包含全部Java基础知识点、Java8新特性、Java集合、Java多线程、Java代码实例,理论结合实战,实现Java的轻松学习。
[Python从零到壹] 一.为什么我们要学Python及基础语法详解
热门推荐
杨秀璋的专栏
08-23 2万+
欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界。所有文章都将结合案例、代码和作者的经验讲解,真心想把自己近十年的编程经验分享给大家,希望对您有所帮助,文章中不足之处也请海涵。在这个喧嚣的时代,很多技术或概念会不断兴起,我希望你能沉下心来去学习,不要急于求成,一步一个脚印....
C++string接口从生涩到灵活使用——这篇文章就够
Lin_zhiyouyu的博客
11-04 862
本篇文章其实是以笔者在LeetCode的刷题经历为基础而诞生的。string接口有100多个,实在有些繁杂,哪些应该熟练掌握,哪些应该简单了解,自己摸索其实成本其实还是挺高的,所以我想这一篇文章能够带给你帮助。内容有些长,只要你耐心看完一定会有很大的收货。各位刚接触string的同道中人也可以先刷刷这些题试试水。
C++String接口的简单介绍
q302989778的博客
11-26 509
相关解释已经作为注释一起写在代码中了 void TestString() { string s1; //构造空字符串 string s2("hello world"); //构造string对象 string s3(5, 'a'); //用n个字符来构造string对象 string s4(s2); //拷贝构造函数 string s5(s2, 5); //...
C++string的常用接口说明(超全超详细)
最新发布
wer24_25的博客
09-03 1038
全文接近一万字,想要走进C++string,这一篇就足够了!!!
C++——string常用接口
Britney_dark的博客
07-24 860
我想成为一个温柔的人,因为曾被温柔的人那样对待,深深了解那种被温柔相待的感觉。
C++String接口的实现
一只学弱。
11-07 438
c++string库部分接口的实现,通过接口间的复用,使个个接口紧密联系,更加简洁。 重要接口Expand()通过检测当前对象容量是否满足要求,对对象进行扩容等操作。 此次实现string全部使用的是深拷贝。#include<iostream> #include<string.h> #include<assert.h> #include<string> using namespace std;
C++string常用接口
Rinne's blog
03-06 1275
文章目录一、STL二、string1. 定义2. 常用接口构造函数:字符串长度:申请空间大小:清除数据:字符串数组:字符:遍历字符串:开空间:打印字符串:查找字符串: 一、STL STL(standard template libaray-标准模板库): 是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。 二、string 1. 定义 string是一个字符串的模板 int main() { string s1("hello");//构造对象
零基础】入门C语言一篇就够
weixin_65174108的博客
06-10 9715
C语言是一门通用计算机编程语言,广泛应用于。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言
学好这 13 种数据结构,应对各种编程语言C++ 版)
Abelia的博客
06-26 526
学了这么长时间数据结构和算法,有必要来个总结了,顺便回顾一下我们这段时间的学习成果。以 C++ 语言本身提供的数据结构为例。如果能掌握这 13 种数据结构,相信在学习其它语言的时候就不费劲了。 数组 Array 数组在初始化的时候就需要知道其大小,后续是不可以改变其大小的,可以通过下标来获取某个 index 中存放的元素。在 C++ 中通过源码可以知道,它其实是在 C 数组的基础上封装的:...
01【计算机基础、Java概述】
緑水長流*z
07-30 1万+
01【计算机基础、Java概述】 一、计算机的基础 1.1 计算机基础 1.1.1 计算机基础概述 Java是一门编程语言语言有英语、法语、俄罗斯语等,仅我们国家就有汉语、藏语、满语等,但不管是什么语言,都是用来沟通的介质。其表达意思的本质都是一样的,程序员编程的本质就是让计算机去工作,而编程语言就是程序员与计算机沟通的介质程序员要想让计算机工作,必须知道计算机能干什么,怎么干的,这也就是我们必须学习计算机基础的原因; 程序员用编程语言写程序,最终开发出的结果就是一个软件,这些软件必须运行在操作系统
C++ —— string的实用接口
weixin_59913110的博客
10-28 1192
string实用的接口,没有废话,代码很多:size()与length()的区别,resize()更改有效字符个数以及对容量的影响;string的遍历方式,[]运算符重载,范围for,迭代器;+=运算符重载,find的使用……未更新完,喜欢就收藏起来!
C++:String相关接口介绍
qq_44851228的博客
11-21 173
  在C语言中我们常使用char*字符串进行相关的操作,在使用字符串时,在学习C++时,标准库为我们提供了专门的string的相关接口。抛弃了char*字符串的相关用法,是因为和标准库相较,我们在使用时不必考虑内存是否足够、字符串长度等等,并且作为了一个出现,它所提供的相关函数的操作满足了我们大多数情况下的需求,我们可以简单的理解为string是一种C++的基本数据类型。 标准库的String 使用时包含在头文件<string>中; string是表示字符串的字符串; 标准的字符串
C++ string常用接口
weixin_57023347的博客
07-14 674
目录 前言 一.string的常用接口 1.1 string对象的构造函数 1.2 string对象的容量函数 1.3 string对象的访问及遍历操作 1.4 string修改操作 1.5 string 非成员函数 前言 在C语言中,字符串是以'\0'结尾的一些字符的集合。为了操作方便,C语言中还提供了一些控制字符串的函数例如strcpy,strcmp,strcat等等。但是这些函数与字符串是分离开的,并不符合C++封装的特性。于是C++中由单独产生了一个s...
深入篇【C++string的常用接口介绍:标准库中的string 【万字总结】
Extreme_wei的博客
06-13 1595
深入篇【C++string的常用接口介绍:标准库中的string 【万字总结】💯💯💯 总结string中常用接口以及如何应用,剖析底层原理,更深入理解C++中的string'
C++string——字符串常用函数接口详解
一岁就可帅的博客
04-16 1101
C++中,string是一个表示字符串的数据类型。它是C++标准库中的一部分,可以通过包含 "string" 头文件来使用。
C++string常用接口
Hush_H的博客
05-01 963
string常用接口
C++string接口的了解和使用
ChaoFreeandeasy_的博客
11-26 1234
为什么我们要学string呢?那是必须是为了方便啊!在C语言中,我们创建一个字符串,有很多操作或者必须要注意的细节会把控不住,所以C++中出现了string,让我们应对字符串等oj题也方便快捷了许多!
C++ string字符串详解:高效操作与构造函数
C++ string字符串C++标准库中对C语言中字符数组表示字符串的改进,它提供了一种更为高效和方便的方式来处理字符串操作。本文将详细介绍C++ string的主要特性及其在实际编程中的应用。 1. **支持字符串连接**:...
写文章

热门文章

  • 【Linux】什么是文件系统及inode?如何创建软硬链接?软硬链接有什么作用? 6126
  • 超详细的Linux环境下使用git上传代码教程(gitee版) 4958
  • 【Linux】进程信号 -- 信号产生 | 系统调用、硬件、软件的信号发送 4332
  • 【传输层】TCP -- 三次握手四次挥手 | 可靠性与提高性能策略 4001
  • CPU独占内核运行方式实现,并指定线程到特定CPU上执行 3280

分类专栏

  • Windows开发小demo 1篇
  • Linux开发小demo 2篇
  • C语言初学者 4篇
  • Linux系统基础 26篇
  • C++基础知识 20篇
  • Linux网络基础 8篇
  • 面试题 6篇
  • 数据结构 6篇

最新评论

  • 超详细的Linux环境下使用git上传代码教程(gitee版)

    寒雒: 谢谢博主,文章很有帮助,内容简洁干练,总结到位.表情包向大佬学习

  • C++关于vector底层模拟实现扩容的时候,使用memcpy拷贝数据导致的野指针和数据丢失问题及解决办法

    Fragilenot: 请问博主 C++11有更好的办法是什么

  • 【数据链路层】网络基础 -- MAC帧协议与ARP协议

    Tina_Run_润: 感谢分享【数据链路层】网络基础 -- MAC帧协议与ARP协议,期待一同进步!

  • 【数据链路层】网络基础 -- MAC帧协议与ARP协议

    黑夢: 优质好文,内容丰富,结构严谨,感谢大佬的分享,期待大佬持续输出好文

  • 【数据链路层】网络基础 -- MAC帧协议与ARP协议

    小白在努力jy: 大佬的文章让我对这领域的技术问题有了更深入的了解,尤其是大佬提到的那些“坑点”,我相信能够在实际应用中避免或解决很多问题。谢谢大佬的分享,期待大佬的更多精彩文章,让我们共同学习、进步。

最新文章

  • SSH连接SFTP传输:如何使用libssh库在windows环境下进行(文件、文件夹)传输到远端服务器
  • SSH连接SFTP传输:如何使用libssh库在Linux环境下进行(文件、文件夹)传输到远端服务器
  • CPU独占内核运行方式实现,并指定线程到特定CPU上执行
2024年3篇
2023年52篇
2022年22篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

侠客cheems

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家无锡定做玻璃钢造型雕塑玻璃钢雕塑年度总结遵义佛像玻璃钢雕塑上海玻璃钢雕塑有限公司白城商场美陈周口景观校园玻璃钢雕塑厂家苏州湘西玻璃钢卡通雕塑陕西太湖石玻璃钢景观雕塑公司贵阳玻璃钢雕塑厂在哪商场美陈大赛视频梧州玻璃钢雕塑价格玻璃钢花盆花器爆销周口彩绘玻璃钢雕塑加工定制广州学校玻璃钢雕塑价位北京玻璃钢雕塑摆件设计企业玻璃钢雕塑用什么颜色上色好看赣州大型玻璃钢雕塑批发山西标牌标识玻璃钢仿铜雕塑厂家镂空校园玻璃钢景观雕塑定制惠州会发光的玻璃钢雕塑摆件步行街商场美陈安徽省玻璃钢雕塑销售生产玻璃钢卡通雕塑要求商场美陈样式綦江玻璃钢雕塑安徽玻璃钢雕塑之家东莞透明玻璃钢雕塑工艺太原户外玻璃钢雕塑造型陕西广场标识玻璃钢仿铜雕塑阜平玻璃钢花盆花器香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化