C++——string类及其使用

news2024/9/25 9:30:48
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个字符初始化给s6
	string s6("hello world", 3); 

	//string (size_t n, char c);  将n个字符a作为参数初始化s7
	string 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个字符,然后将其返回

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1981501.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

体系结构论文导读(三十一)(上):Soft errors in DNN accelerators: A comprehensive review

Soft errors in DNN accelerators: A comprehensive review DNN 加速器中的软错误&#xff1a;全面回顾 一、文章核心 深度学习任务覆盖了广泛应用。DNN算法被实现于不同系统上&#xff0c;从小型嵌入式设备到数据中心。DNN加速器&#xff08;例如GPU、FPGA、ASIC&#xff0…

JetBrains:Wrong tag。注释告警

报错信息如下&#xff1a; Wrong tag ‘copyright:’ &#xff0c;这个是alt enter 选择 Add copyright:to custom tags&#xff0c;虽然能解决问题&#xff0c;如果创建一个新项目又回出现这个告警提示。 其实这个问题的就是这个在Java Doc里面不存在&#xff0c;才会出现这…

Bugku-CTF-聪明的php

pass a parameter and maybe the flag files filename is random :> 传递一个参数&#xff0c;可能标记文件的文件名是随机的: 于是传一下参&#xff0c;在原网页后面加上/?a1,发现网页出现了变化 3.传入参数&#xff0c;一般情况下是文件包含&#xff0c;或者命令执行&…

linux安装weblogic

文章目录 weblogic是干什么用的weblogic安装前置条件1. 安装jdk2.安装weblogic2.1.创建用户组及用户2.2.切换用户上传安装jar包到目录下&#xff0c;配置文件进行安装准备配置文件2.3保证安装配置文件和安装jar包在同一目录&#xff0c;执行安装命令 3. 创建域来启动页面3.1 构…

Science Robotics 封面论文:美国宇航局喷气推进实验室开发了自主蛇形机器人,用于冰雪世界探索

人们对探索冰冷的卫星&#xff08;如土卫二&#xff09;的兴趣越来越大&#xff0c;这可能具有天体生物学意义。然而&#xff0c;由于地表或冰口内的环境极端&#xff0c;获取样本具有挑战性。美国宇航局的喷气推进实验室正在开发一种名为Exobiology Extant Life Surveyor&…

【分巧克力】

题目 代码 #include<bits/stdc.h> using namespace std;const int N 1e510; int n, k; int h[N], w[N]; bool check(int mid) {int cnt 0;for(int i 1; i < n; i){cnt (h[i] / mid) * (w[i] / mid); //切块一定是切出长方形洞才最省料&#xff0c;这样的话能切几…

等保测评练习卷27

等级保护初级测评师试题27 姓名&#xff1a; 成绩&#xff1a; 一、判断题&#xff08;10110分&#xff09; 1.对于大型物联网来说&#xff0c;处理应用层一般由云计算平台和业务应用终端设备构成。&#xff08; T &#xff09; …

企业数据接口:股权穿透

支持查询公司名称&#xff0c;股权路径&#xff0c;股东出资比例&#xff0c;层级等信息&#xff0c;呈现出公司多层次股权结构&#xff0c;高效理清企业投资股权关系

部署服务器项目及发布

当技术总监直接丢给我一个服务器账号密码时&#xff0c;我该怎么完成映射本机&#xff1b;配置网关&#xff1b;配置代理和发布项目呢&#xff1f; 我使用的是putty远程登录到服务器 输入ip后&#xff0c;点open 输入账号密码 登录的账号如果不是root&#xff1b;使用sudo su…

表中记录的操作

一、查询表中的记录 二、在表中插入记录&#xff0c;删除记录&#xff0c;修改记录 三、常用的运算符 四、数据类型

string.format()拼接参数

string.format()拼接参数 private static void testString() {String queryParams String.format("?pwdErrNum%s&userSts%s&lockSts%s", 123, 1, 1);System.out.println(queryParams);}打印结果

事务的原理(学习笔记)

redo log 如果没有redo log 我们在执行完增删改查语句后会将脏页直接刷新到磁盘中&#xff0c;此时用户事务已经提交&#xff0c;一旦刷新失败则无法修复数据。如果不适用redo log 还会存在性能问题&#xff0c;事务中的一组操作都是随机操作数据页&#xff0c;涉及到大量随机…

DeepSeek Coder V2开源发布,首超GPT4-Turbo的代码能力

击败GPT4-Turbo&#xff0c;最强开源代码模型DeepSeek-Coder-V2问世&#xff5c;SiliconCloud上新 6月17日&#xff0c;深度求索正式开源了DeepSeek-Coder-V2模型。 根据相关评测榜单&#xff0c;这是全球首个在代码、数学能力上超越GPT-4-Turbo、Claude3-Opus、Gemini-1.5Pro…

DolphinDB 编程进阶:掌握这十个细节,让你的代码更出色

众所周知&#xff0c;编程细节不仅关乎代码的美观与整洁&#xff0c;更是确保软件质量、提升开发效率、减少维护成本以及保障系统稳定性的基石。 今天和大家分享的内容是&#xff1a;使用 DolphinDB 编程时&#xff0c;十个常被忽略但至关重要的细节。本文涵盖了元编程技巧、数…

攻防演练号角吹响,聚铭铭察高级威胁检测系统助您零失分打赢重保攻坚战

在数字化浪潮中&#xff0c;攻防演练成为了衡量网络安全防御力的核心标尺&#xff0c;其重要性与日俱增。这项由政府、行业监管或企业内部主导的安全活动&#xff0c;随着互联网普及而兴起&#xff0c;现已发展成为全球公认的检验网络安全体系效能的标准。它不仅关乎技术实力的…

JaCoCo - Java Code Coverage Library

概述 JaCoCo&#xff08;Java Code Coverage&#xff09;是一个开源的Java代码覆盖率库。它可以帮助开发人员测量单元测试和集成测试中代码的覆盖情况。通过使用JaCoCo&#xff0c;开发人员可以识别哪些代码没有被测试覆盖&#xff0c;从而提高代码的质量和可靠性。 功能 1.…

C语言宠物系统

功能有增加宠物信息&#xff0c;显示宠物信息&#xff0c;删除宠物信息&#xff0c;修改功能和排序功能&#xff0c;可以选择姓名排序&#xff0c;年龄排序&#xff0c;价格排序。进阶的功能有文件操作&#xff0c;动态内存开辟。。 test.c源文件 #include "Pet.h"v…

角色管理功能助你打造精准智慧校园系统

在智慧校园的信息化架构中&#xff0c;角色管理功能犹如一把精细的钥匙&#xff0c;开启着系统安全与高效运作的大门。它不仅关乎信息的访问权限&#xff0c;更深层次地影响着校园内各类活动的顺畅进行。 智慧校园的角色管理&#xff0c;首先体现在对用户群体的细致划分上。系统…

【Linux】进程间通信:详解 VSCode使用 | 匿名管道

目录 0. 引入&#xff1a;vscode 的使用 下载 推荐插件 连接云服务器 1. 进程间通信 1.1 是什么 1.2 为什么 1.3 怎么办 介绍 &#xff1a; 2. 匿名管道 2.1 引入 2.2 原理 3. 建立管道的系统调用pipe 3.1 介绍 形参 返回值 3.2 代码 3.3 站在内核的角度 编…

通俗易懂的告诉你大模型如何微调!

如今&#xff0c;大模型&#xff08;Large Language Models&#xff09;在人工智能领域可是炙手可热的话题。它们拥有庞大的参数和广泛的知识&#xff0c;能够处理各种复杂的任务。然而&#xff0c;就像一把锋利的刀需要经过磨砺才能更贴合手型一样&#xff0c;大模型也需要经过…