当前位置: 首页 > news >正文

C++——string类及其使用

P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。
P. S.:测试代码均未展示头文件iostream的声明,使用时请自行添加。

  

在这里插入图片描述

                                           博主主页:Yan. yan.
                                              C语言专栏
                                            数据结构专栏
                                         力扣牛客经典题目专栏
                                                     C++专栏

文章目录

  • 一、标准库里的string类
  • 二、string成员操作函数
    • 构造函数
    • operator =
  • 三、迭代器
    • 正向迭代器(iterator)
    • 反向迭代器(reverse_iterator)
    • 范围for
  • 四、 string类对象的容量操作
    • size
    • length
    • capacity
    • max_size
    • reserve
    • resize
    • clear
  • 五、string类对象的修改操作

一、标准库里的string类

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

  • string是表示字符串的字符串类
  • 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。
  • string在底层实际是:basic_string模板类的别名,typedef basic_string<char, char_traits, allocator>string;
  • 不能操作多字节或者变长字符的序列

  string对象会自动忽略开头的空白(即空格、换行等)并从第一个真正的字符开始读入,直到遇到下一处空白。

在这里插入图片描述
  这时world还在缓冲区,这是再次cin一下就会自动打印剩下的字符。
在这里插入图片描述

二、string成员操作函数

构造函数

在这里插入图片描述

	//string()  创建一个空的串,其大小和内容为空string s1; //string(const char* s);  创建一个字符串类,将其初始化为一串字符,且这串字符不能被改变string s2("hello world"); //string (const string& str);  将str的内容作为参数来初始化s3,且str不可修改。string s3(s2); //string (const string& str, size_t pos, size_t len = npos);  从字符串str的下标为pos的字符开始拷贝npos个到s4里string s4(s2, 2, 3);string s5(s2, 5);       //从字符串s2的下标为2开始后面的字符全部拷贝到s5拷贝里   //string (const char* s, size_t n);  将字符串的前n个字符初始化给s6string s6("hello world", 3); //string (size_t n, char c);  将n个字符a作为参数初始化s7string s7(3, 'a'); template <class InputIterator>string(InputIterator first, InputIterator last); // 模板代码,为了创建一个通用模板方便对于string类对象的初始化

在这里插入图片描述

operator =

在这里插入图片描述

	//string& operator= (const string& str);string s1("holle world");string s2 = s1;//string& operator= (const char* s);string s3 = "holle world";//string& operator= (char c);s3 = 'x';

注意: 不可以单独用一个字符来初始化, 传递单个字符就相当于是重置了串中的内容,只能使用已经创建好的串来接收。
在这里插入图片描述

三、迭代器

  迭代器与C语言指针的使用方法相似,但是其本质却有很大的差别。目前的学习阶段暂且可以认为迭代器就是一个指针,指向串中数据的所在位置的下标。

正向迭代器(iterator)

正向迭代器就是以头为起点,尾为结点。
正向迭代器需要用到两个函数:
在这里插入图片描述
在这里插入图片描述
  string::begin和string::end代表字符串的头和尾。

int main()
{string s1("holle world");string::iterator it = s1.begin();while (it != s1.end()){cout << *it;it++;}cout << endl;return 0;
}

在这里插入图片描述
  值得注意的是,其中的 begin() 所返回的是第一个数据所在下表位置,而 end() 所返回的并不是最后一个数据的下标,而是最后一个数据的下一个位置的下标,且当传入的数据串为const类型时,无法通过迭代器对其进行修改,仅可读。

反向迭代器(reverse_iterator)

  反向迭代器需要另外两个函数
在这里插入图片描述
在这里插入图片描述
  string::rbegin和string::rend表示字符串的为和头

int main()
{string s1("holle world");string::reverse_iterator rit = s1.rbegin();while (rit != s1.rend()){cout << *rit;rit++;}cout << endl;return 0;
}

在这里插入图片描述

范围for

  关于打印字符串,除了用迭代器,还可以用范围for。
在这里插入图片描述

四、 string类对象的容量操作

size

在这里插入图片描述

  size函数用来返回当前字符串的有限长度,单位为字节。
在这里插入图片描述
用这个函数结合范围for还可以遍历字符串。
在这里插入图片描述

length

在这里插入图片描述

  此函数用来返回当前字符串的有限长度,单位为字节,不统计字符串末尾 "\0"所占长度。
在这里插入图片描述

capacity

在这里插入图片描述

  此函数用来返回字符串的空间总大小。
在这里插入图片描述

max_size

在这里插入图片描述
  此函数主要功能为返回string串可以存放的最大数据个数(数据为 “ char ”类型)。
在这里插入图片描述
  上图所展示为32位机器所能创建的最大数据个数。

reserve

在这里插入图片描述
  此函数的主要功能为扩容,但在不同编译器下的操作限制有所不同,例如在VS下不可以反向扩容,即缩容,但在linux下可以。
在这里插入图片描述

resize

在这里插入图片描述
  此函数的主要功能为改变串的大小,不仅仅影响串的size,也可能会影响capacity。

string s("hello world");s.resize(5);cout << s << endl;cout << "s.size->" << s.size() << endl << endl;string s1("hello world");s1.resize(25, 'x');cout << s1 << endl;cout << "s1.size->" << s1.size() << endl << endl;string s2;s2.resize(25, 'x');cout << s2 << endl;cout << "s2.size->" << s2.size() << endl << endl;string s3;s3.resize(25);cout << s3 << endl;cout << "s3.size->" << s3.size() << endl << endl;

在这里插入图片描述
  上图所示,resize会改变串的大小,当改变前串中所储存数据大小大于改变后大小时,仅保留改变后的前几位数据;
  当所传参数位 ( 数字 ,字符),resize会将串中的数据置换为所传的 n 个字符,并改变其串的大小,改变后大小为 n 。
  当只传递数字时,若原串没有数据,则将其串内数据赋默认值 ’ \0 '。

clear

在这里插入图片描述
此函数功能为清楚串内数据。
在这里插入图片描述

五、string类对象的修改操作

函数名称功能说明
push_back在字符串后尾插字符c
append在字符串后追加一个字符串
operator+=在字符串后追加字符串
find+npos从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置
rfind从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置
substr在str中从pos位置开始,截取n个字符,然后将其返回

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • TeleVis:基于NLP的新冠新闻舆情可视化项目
  • YOLOv8改进 | 注意力机制 | 反向残差注意力机制【内含创新技巧思维】
  • ShardingProxy使用自定义策略,数据迁移方案
  • 排序算法:归并排序,golang实现
  • C语言自定义类型联合体与枚举超详解
  • Python中的“@”,有什么用?
  • 【Tessent】【Command】set_design_level Design Level
  • 【系统架构设计师】二十四、安全架构设计理论与实践⑤
  • 双算法https证书获取指南
  • win10自带dll修复丢失的几种方法,快速修复错误dll文件的方式
  • c++初阶-----STL---list
  • 人力资源杂志人力资源杂志社人力资源编辑部2024年第13期目录
  • 白骑士的PyCharm教学高级篇 3.1 性能分析与优化
  • SQL各种注入详解加案例--持续更新
  • 【数据结构】mapset详解
  • 11111111
  • Babel配置的不完全指南
  • JAVA SE 6 GC调优笔记
  • Javascript编码规范
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • python docx文档转html页面
  • Swoft 源码剖析 - 代码自动更新机制
  • vuex 笔记整理
  • windows下如何用phpstorm同步测试服务器
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 批量截取pdf文件
  • 如何选择开源的机器学习框架?
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 优秀架构师必须掌握的架构思维
  • FaaS 的简单实践
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • 交换综合实验一
  • 正则表达式-基础知识Review
  • ​Python 3 新特性:类型注解
  • ​如何使用QGIS制作三维建筑
  • #Linux(权限管理)
  • (1)Jupyter Notebook 下载及安装
  • (C#)获取字符编码的类
  • (java)关于Thread的挂起和恢复
  • (k8s中)docker netty OOM问题记录
  • (pojstep1.1.2)2654(直叙式模拟)
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (笔试题)分解质因式
  • (第27天)Oracle 数据泵转换分区表
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (十三)Flink SQL
  • (一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别
  • .net core webapi 大文件上传到wwwroot文件夹
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET 快速重构概要1
  • .net6Api后台+uniapp导出Excel
  • .net程序集学习心得
  • .net图片验证码生成、点击刷新及验证输入是否正确