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

C++容器string的运用和注意

介绍

        首先,先说明,string在C++的string头文件中定义,而在C语言中的字符串就是字符数组,在C++中,string容器相当于C语言中的字符数组,string比C语言中的字符数组更为好用,如:C++中cin/cout可以直接读写string类型,但却不能读写字符数组,string还可以像整数那样"相加",并且string容器还支持许多流式的读写以及各种的函数和运算符操作,但是string的运算速度有些慢。


一,string的赋值操作

1,直接用string函数进行初始化

        具体功能和解释如下:

#include<iostream>
#include<string>
using namespace std;
int main()
{string s1;const char* a = "abcd";string s2(a);//进行初始化s2,等效于s2 = acout << "s2 = " << s2 << endl;s1 = s2;//不可s1 = a,因为在此种数组结构中string形式才可以直接赋值cout << "s1 = " << s1 << endl;string s4(10, 'a');//放入10个a,这里第二个参数只能是字符,不能是串cout << "s4 = " << s4 << endl;string s5(a, 1, 2);//从a第1个位置上开始的2个元素放入s5中cout << "s5 = " << s5 << endl;string s6("abcdef",5);//将串"abcdef"的前5个元素赋给s6cout << "s6 = " << s6 << endl; return 0;
}

        在这里要说明的是,运用以上方式进行赋值时不能先建立,后赋值,必须建立时就进行初始化。即:

//以下是错误的运用

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string s1;
    const char* a = "abcd";
    string s2;
    s2(a);

    string s4;
    s4(10, 'a');

    string s5;
    s5(a, 1, 2);

    string s6;
    s6("abcdef", 5);
    return 0;
}

2,assrgn函数的赋值操作

        在很多情况我们需要对string进行赋值操作,若要用类似于以上的方式进行赋值,要用string容器中所支持的assign函数,如下代码:

//以下是正确的用法

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string s1;
    const char* a = "abcd";
    string s2;
    s2.assign(a);

    string s4;
    s4.assign(10, 'a');

    string s5;
    s5.assign(a, 1, 2);

    string s6;
    s6.assign("abcdef", 5);
    return 0;
}

        以上是常见的assign四种赋值操作。

二,添加串append的运用

        append的作用跟C语言中的strcat函数作用相同(但要比此结构高级很多),此函数可在不不同位置进行添加,运用比较灵活。

        C++容器string中支持append的运用,此函数的用法与assig的用法一样,只是功能不同罢了,前面代码已经说明了很清楚了这种用法,在这里我就直接用代码跟大家演示:

#include<iostream>
#include<string>
using namespace std;
int main()
{string s7;s7.append("abc");//将" abc"加在s7的末尾cout << "s7 = " << s7 << endl;s7.append("abcdef", 3);//将数组"abcdef"的前3个字符加在s7的后面cout << "s7 = " << s7 << endl;s7.append(5, 'w');//将5个字符'w'加在s7的末尾cout << "s7 = " << s7 << endl;s7.append(s7, 4, 3);//截取从s7的第4个下标字符开始,往后的3个字符,下标从0开始cout << "s7 = " << s7 << endl;return 0;
}

三,string容器的插入,删除,访问,截取操作

        插入操作的函数是insert,删除操作的操作有erase和pop(其中erase的删除比较灵活,pop删除操作在string容器支持中只能删除首元素),访问元素可以用C语言中的符号"[]"或这C++中的at,截取操作有substr。具体使用如下代码:

#include<iostream>
#include<string>
using namespace std;
int main()
{//insert插入操作string s1 = "abc";s1.insert(1, "123");//从第1个位置起插入"123"串,下标从0开始cout << "s1 = " << s1 << endl;s1.insert(0, 2, '5');//向开头位置插入2个字符'5',第三个参数不能为串,只能为字符cout << "s1 = " << s1 << endl;//at访问操作,s.at(i)等效于s[i]string s = "abcdefg";cout << "s = ";for (int i = 0; i < s.size(); i++) {cout << s.at(i) << " ";}cout << endl;//erase和pop删除操作的运用string str1 = "abcdefg";str1.pop_back();//删除末尾元素的操作cout << "str1 = " << str1 << endl;str1.erase(1, 3);//从第1个下标起删除三个字符,下标从0开始cout << "str1 = " << str1 << endl;//substr获取截取子串的运用string str2 = "abcdef";string a = str2.substr(1, 3);//从str的第1个下标起截取3个字符赋给acout << "a = " << a << endl;return 0;
}

        总:以上就是C++中容器string的几种常规操作,对于初学者而言,C++的语法和运用层次虽然简单,但C++的语法过多,结构凌乱,可能导致学者容易过忘,本文章将其中常规的操作基本全部整理融合,方便学者学习可记忆,希望得到大家支持。

相关文章:

C++容器string的运用和注意

介绍 首先&#xff0c;先说明&#xff0c;string在C的string头文件中定义&#xff0c;而在C语言中的字符串就是字符数组&#xff0c;在C中&#xff0c;string容器相当于C语言中的字符数组&#xff0c;string比C语言中的字符数组更为好用&#xff0c;如&#xff1a;C中cin/cout可…...

用对工具,你的全渠道电子商务业务就成功了一半

希望将全渠道电子商务纳入您的业务战略&#xff0c;但不确定从哪里开始&#xff1f;我们为您提供保障。这篇文章将指导您了解全渠道商务的基础知识&#xff0c;以及它与多渠道方法的区别&#xff0c;还将探讨利用全渠道方法的众多好处&#xff0c;并讨论企业如何通过全渠道客户…...

TDengine学习(1):采集量(Metric),标签(label),数据采集点,表,超级表,子表、库

因为TDengine是面向物联网诞生的一种数据库&#xff0c;所以在一些概念的命名上有一点相应的特色。 一、数据采集点 比如需要对一辆高铁上的各种信息进行采集&#xff0c;采集信息存入数据库中。我们可以对高铁车厢内的一些数据进行采集&#xff0c;比如&#xff1a;车厢内温…...

【洛谷 P1029】[NOIP2001 普及组] 最大公约数和最小公倍数问题 题解(辗转相除法)

[NOIP2001 普及组] 最大公约数和最小公倍数问题 题目描述 输入两个正整数 x 0 , y 0 x_0, y_0 x0​,y0​&#xff0c;求出满足下列条件的 P , Q P, Q P,Q 的个数&#xff1a; P , Q P,Q P,Q 是正整数。 要求 P , Q P, Q P,Q 以 x 0 x_0 x0​ 为最大公约数&#xff0c;以…...

Golang 中的 errors 包详解:返回自定义 error 类型

之前的文章《Golang 中的 errors 包详解》详细讲解了 errors 包的主要类型和函数&#xff0c;以及它们的使用方法。本文结合之前讲解的知识&#xff0c;来讲解一下根据自己或团队的项目要求如何返回自定义的 error 类型。 为什么需要自定义 error 类型&#xff1f; 在日常开发…...

C#开发的OpenRA游戏之信标按钮

前面已经分析了两个按钮:变卖和维修,接着下来就是分析信标按钮,这个按钮使用是比较少,但是对于多人游戏时,使用这个信号就很方便同盟军过来查看和帮助了,相当于一个朋友之间共同查看的地址。当你经过同盟标记的标志时,就会听到beacon detected,检测到信标,这就是你的盟…...

16字节协议的串口通信

1.协议要求 协议为帧传输&#xff0c;一共16字节。主要是2字节的固定帧头 EB 90&#xff0c;2字节的帧计数(用来计数发出的帧),10字节的数据和2字节的校验位 帧头&#xff1a;2字节&#xff0c;固定值 8’HEB、8’H90 帧计数&#xff1a;2字节&#xff0c;用来说明发出去帧是…...

升哲科技城市级“算力+数字底座”服务亮相2023服贸会

9月2日至6日&#xff0c;以“开放引领发展&#xff0c;合作共赢未来”为主题的2023年中国国际服务贸易交易会在北京隆重举办。作为城市级数据服务商&#xff0c;升哲科技&#xff08;SENSORO&#xff09;连续第四年参加服贸会&#xff0c;携城市级“算力数字底座”服务及在城市…...

动态规划之简单多状态

简单多状态 1. 按摩师&#xff08;easy&#xff09;2. 打家劫舍II &#xff08;medium&#xff09;3. 删除并获得点数&#xff08;medium&#xff09;4. 买卖股票的最佳时机含冷冻期&#xff08;medium&#xff09;5. 买卖股票的最佳时机III&#xff08;hard&#xff09; 1. 按…...

跨数据中心Multi-Fabric解决方案:L2和L3网络的高效连接和扩展

云数据中心里&#xff0c;为什么需要DCI互通&#xff1f; 云化数据中心&#xff0c;网络资源通过虚拟化技术形成资源池&#xff0c;实现业务与物理网络解耦&#xff0c;通过网络虚拟化&#xff0c;物理网络资源可以被分成多个虚拟网络资源&#xff0c;从而提高网络资源的使用效…...

upload-labs靶场通关详解

文章目录 Pass-01Pass-02Pass-03Pass-04Pass-05Pass-06Pass-07Pass-08Pass-09Pass-10Pass-11Pass-12Pass-13Pass-14Pass-15Pass-16Pass-17Pass-18Pass-19Pass-20方法一&#xff08;文件夹名欺骗绕过&#xff09;方法二&#xff08;%00截断攻击&#xff09; Pass-21 Pass-01 绕过…...

Leetcode刷题笔记--Hot41-50

1--二叉树的层序遍历&#xff08;102&#xff09; 主要思路&#xff1a; 经典广度优先搜索&#xff0c;基于队列&#xff1b; 对于本题需要将同一层的节点放在一个数组中&#xff0c;因此遍历的时候需要用一个变量 nums 来记录当前层的节点数&#xff0c;即 nums 等于队列元素的…...

「MySQL-02」数据库的操纵、备份、还原和编码规则

目录 一、库操作 1. 创建数据库 2. 查看所有数据库 3. 删除数据库 4. 修改数据库 5. 进入一个数据库 二、查看和设置数据库的编码规则 1. MySQL的两个编码规则&#xff1a;字符集和校验规则 2. 查看MySQL当前使用的字符集以及校验规则 3. 查看MySQL支持的所有字符集 4. 查看MyS…...

Effective C++条款24——若所有参数皆需类型转换,请为此采用non-member涵数(设计与声明)

我在导读中提过&#xff0c;令classes支持隐式类型转换通常是个糟糕的主意。当然这条规则有其例外&#xff0c;最常见的例外是在建立数值类型时。假设你设计一个class用来表现有理数&#xff0c;允许整数“隐式转换”为有理数似乎颇为合理。的确&#xff0c;它并不比C内置从int…...

决策工具箱:战略分析必备工具与框架

跟随时代的步伐&#xff0c;企业战略也在不断演化。无论是初创企业还是知名企业&#xff0c;都需要有效的战略工具来指导其业务发展。探索这些必备工具&#xff0c;并学习如何最大限度地利用它们&#xff0c;是企业的一个学习目标。 战略分析工具和框架有很多&#xff0c;其中…...

【压力测试指南】没有任何文档,小白也可以做的压力测试

前言 一般在执行压力测试之前&#xff0c;会由开发提供出接口文档&#xff0c;包含一些接口的详细参数&#xff0c;便于测试工程师编写测试脚本。但在某些情况下&#xff0c;接口等相关文档缺失&#xff0c;那作为Tester&#xff0c;我们该如何顺利的实施压力测试呢&#xff1…...

Linux: memory: memblock: debug

文章目录 代码memblock=debug实例log代码 将内存相关的一些日志打开: static int __init early_memblock(char *p) {if (p && strstr(p, "debug")...

搬家快递服务小程序的便利性

在当今快节奏的生活中&#xff0c;搬家可能是很多人都需要面对的问题。无论是新房子还是新办公室&#xff0c;都需要高效、便捷的搬家服务。本文将介绍如何使用第三方小程序制作平台&#xff0c;如乔拓云平台&#xff0c;开发一款高效便捷的搬家服务小程序。 1. 注册登录第三方…...

软件架构师 Debugging

软件架构师 Debugging 目录概述需求&#xff1a; 设计思路实现思路分析 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,challenge Survi…...

​7.1 项目1 学生通讯录管理:文本文件增删改查(C++版本)(自顶向下设计+断点调试) (A)​

C自学精简教程 目录(必读) 作业目标&#xff1a; 这个作业中&#xff0c;你需要综合运用之前文章中的知识&#xff0c;来解决一个相对完整的应用程序。 作业描述&#xff1a; 1 在这个作业中你需要在文本文件中存储学生通讯录的信息&#xff0c;并在程序启动的时候加载这些…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...