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

C++——string类介绍

我们知道在C语言里,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数, 但是这些库函数与字符串是分离开的,而且底层空间需要用户自己管理,可 能还会越界访问。

但是在C++里,却实现了string类,这个string类大大方便了字符串的定义,增添,删除等操作

定义/赋值/增添/合并

int main()
{string s1("hello world");string s2="hello linux";  string s3=s2;string s4;s4=s2;string s5=s1+s2;string ret2 = s1 + "我来了";return 0;
}

迭代器

顺序

假如我们想对字符串进行遍历,那么就需要用迭代器

int main()
{    string s1("hello world");string::iterator it = s1.begin();//begin()函数返回一个迭代器,指向字符串的第一个元素.while (it != s1.end());//end()函数返回一个迭代器,指向字符串的末尾{cout << *it << " ";//打印++it;*it = 'a';//也可以进行修改}cout << endl;return 0;
}

迭代器就类似于一个指针,指向了第一个字母的地址,' * '就是进行解引用

逆序

若是想对字符串进行倒序的读取

string s1("hello world");
auto rit = s1.rbegin();//可以用auto 自动判断类型
while (rit != s1.rend())
{cout << *rit << " ";++rit;
}
cout << endl;

提取字符

//选定字符串,开始的位置,要的字符数
// source_str  pos  num
string s1("hello world");
string s3(s1, 0, 5);string s5("hello linuxaaaaaaaaaaaaaaaaaaa");
string s6(s5, 6);
//npos(最后一个取的数字不填入)-直接取到最后一个 (npos=-1)string s9(++s8.begin(), --s8.end());//也可以用区间
cout << s9 << endl;

读取长度

string s1("hello world");
//大小
cout << s1.size() << endl;
cout << s1.length() << endl;//容量
cout << s1.capacity() << endl;//clear清理数据
s1.clear();//最大容量
cout << s1.max_size() << endl;

ps:容量capacity不会缩小,只会增大

保存空间/预定空间

string s;
s.reserve(100);//保存100个数据的空间,确定知道大概要多少空间,提前开好,减少扩容,提高效率

改变大小

string s("hello world");
cout << s.size() << endl;
cout << s.capacity() << endl;
cout << s << endl;
//s.resize(13);//默认用'\0'进行改变容量
s.resize(13, 'x');//也可以修改为用'x'进行容量的改变

获取指定位置的字符

s.at(0)++;
s[0]++;
//二者一样,但是at访问失败会返回一个抛异常cout << s2 << endl;

尾插

string ss("world");
string s;
s.push_back('#');//#后加上s的内容
s.append("hello");//在其后边加上这个 
cout << s << endl;
s.append(ss);//在s后边加上ss的内容
cout << s << endl;
s += '#';
s += "hello";
s += ss;
cout << s << endl;

粘贴/拷贝

string str;
string base = "dasdasdasdasdasdasdasd";
str.assign(base);//将base的数据拷贝给str,若str已经有数据,那么就会将已有的数据进行覆盖
cout << str << endl;str.assign(base, 5, 10);//resource pos num
cout << str << endl;

查找

string s1("test.cpp");
size_t i = s1.find(".");//找到.的位置,返回下标string s2 = s1.substr(i);//begin..num-num决定了保留的个数,若不输入则默认到结尾
cout << s2 << endl;//如果有多个重复的字符呢?-rfind,返回最后一个出现要找在字符的位置
string s3("test.cpp.tar.zip");
size_t m = s3.rfind('.');
string s4 = s3.substr(m);
cout << s4 << endl;string s5("");

特殊查找

string str("Please, replace the vowels in this sentence by mistakes.");
size_t found = str.find_first_of("aeiou");//找到其中之一的字符即可
//size_t found = str.find("a");
while (found != string::npos)
{str[found] = '*';found = str.find_first_of("aeiou", found + 1);//found = str.find("a", found + 1);
}
cout << str << '\n';

find和find_first_of 区别就是,find是完美匹配要查找的字符串,find_first_of找到其中一个符合的字符即可

除此之外string类里还有很多函数,例如insert erase replace等,可以查,不需要强制记忆,但是上述是比较经常用的,按需记忆。

相关文章:

C++——string类介绍

我们知道在C语言里&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0c; 但是这些库函数与字符串是分离开的&#xff0c;而且底层空间需要用户自己管理&#xff0c;可 能还会越界访问。 但是在C…...

教雅川学缠论07-中枢实战众泰汽车000980

本文实战众泰汽车 下面是2023年11月14-2023年8月8众泰汽车日K图 先画日K 接下来处理包含&#xff0c;就变成下面这个样子 下面在套上缠论的理论&#xff0c;未来股价的走势应该是红色椭圆形虚线里面的样子 好了&#xff0c;文章就到这里&#xff0c;如果众泰最终不是这个走势…...

REDIS主从配置

目录 前言 一、概述 二、作用 三、缺点 四、redis主从复制的流程 五、搭建redis主从复制 总结 前言 Redis的主从配置是指在Redis集群中&#xff0c;将一个Redis节点配置为主节点&#xff08;master&#xff09;&#xff0c;其他节点配置为从节点&#xff08;slave&#xff09;…...

【测试】软件测试工具JMeter简单用法

简明扼要&#xff0c;点到为止。 1. JMeter介绍 JMeter的全称是Apache JMeter&#xff0c;是一款用于软件测试的工具软件&#xff0c;其是开源免费的&#xff0c;由Apache基金会运营。 官网&#xff1a;Apache JMeter - Apache JMeter™ 2. 下载安装及运行 2.1 安装 Java8…...

五个授权关键,为智能驾驶量产赋能

站在风口浪尖的智能驾驶行业&#xff1f; 智能汽车是指通过搭载先进传感器等装置&#xff0c;运用人工智能等新技术&#xff0c;具有自动驾驶功能&#xff0c;逐步成为智能移动空间和应用终端的新一代汽车。集中运用了计算机、现代传感、信息融合、通讯、人工智能及自动控制等技…...

【代码随想录-Leetcode第三题:977. 有序数组的平方】

题目 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 示例 1&#xff1a; 输入&#xff1a;nums [-4,-1,0,3,10] 输出&#xff1a;[0,1,9,16,100] 解释&#xff1a;平方后&#xff0c;数组…...

[运维|中间件] Apache APISIX Dashboard部署(持续踩坑更新。。。)

参考文献 Apache APISIX v2.6 官方文档 APISIX、APISIX Dashboard搭建、路由配置及插件使用 安装apisix和apisix-dashboard&#xff0c;访问方式&#xff0c;测试路由转发&#xff0c;反向代理等 文档地址 Dashboard Doc 下载地址 Apache APISIX Dashboard下载地址 部署 …...

Vue中watch监听属性新旧值相同问题解决方案

侦听器 _watch: 作用:可以侦听data和computed中数据的变化. 语法 watch: { "被侦听的属性名" (newVal, oldVal){ } } 监听简单数据类型时可以直接使用,而监听复杂数据类型时,例如当我们只需要监听data或者computed中对象的某个属性时,可以使用字符串的形式进行监听…...

awk案例练习

目录 一、awk练习 1.1筛选ip地址 1.2字段去重 1.3次数统计 1.4统计TCP连接状态 1.5处理字段缺失的数据 1.6筛选给定时间范围内的日志 一、awk练习 1.1筛选ip地址 ifconfig命令查看IP 利用awk进行筛选 ifconfig | awk BEGIN{RS""}NR2{print $6} RS指定输入记…...

Debian 12.1 正式发布

导读Debian 12.1 现已发布&#xff0c;这是对稳定发行版 Debian 12&#xff08;代号 Bookworm &#xff09;的首次更新。本次发布主要增加了安全问题的修正&#xff0c;并对严重问题进行了一些调整。 一些更新内容包括&#xff1a; 妥善处理系统用户的创建&#xff1b;修复 eq…...

neo4j清空数据库

清空所有Person、 Movie节点及其所有关系 MATCH (a:Person), (m:Movie) OPTIONAL MATCH (a)-[r1]-(), (m)-[r2]-() DELETE a,r1,m,r2 查询任意数据 MATCH (n) RETURN n 如果没有&#xff0c; 就说明已经删除成功了 这段代码是用Cypher查询语言编写的&#xff0c;用于清空…...

SpringBoot整合Mybatis-Plus

文章目录 前言一、Mybatis-Plus简介二、框架结构三、SpringBoot整合Mybatis-Plus1.依赖2.配置文件设置 四、前期准备4.1数据库信息4.2dao类4.3pojo类 五、常用注解5.1 TableName(value "")5.2 TableId(value"",type IdType.XXX)5.3 TableField("&qu…...

在langchain中使用自定义example selector

在langchain中使用自定义example selector 简介 在之前的文章中&#xff0c;我们提到了可以在跟大模型交互的时候&#xff0c;给大模型提供一些具体的例子内容&#xff0c;方便大模型从这些内容中获取想要的答案。这种方便的机制在langchain中叫做FewShotPromptTemplate。 如…...

pytest常用执行参数详解

1. 查看pytest所有可用参数 我们可以通过pytest -h来查看所有可用参数。 从图中可以看出&#xff0c;pytest的参数有很多&#xff0c;下面是归纳一些常用的参数&#xff1a; -s&#xff1a;输出调试信息&#xff0c;包括print打印的信息。 -v&#xff1a;显示更详细的信息。 …...

本地项目如何连接git远程仓库

在本地新建项目后&#xff0c;如何连接git远程仓库呢&#xff1f;步骤如下&#xff1a; 第一步&#xff0c; 首先我们在git上新建仓库&#xff0c;设置模板可勾选Readme文件。&#xff08;readme文件的创建是为了介绍所写代码的一些详细信息,为了之后更好的维护。&#xff09;…...

力扣 494. 目标和

题目来源&#xff1a;https://leetcode.cn/problems/target-sum/description/ C题解&#xff08;来源代码随想录&#xff09;&#xff1a;将该问题转为01背包问题。 假设加法的总和为x&#xff0c;那么减法对应的总和就是sum - x。所以我们要求的是 x - (sum - x) target。x …...

Maven-搭建私有仓库

使用NEXUS REPOSITORY MANAGER 3在Windows上搭建私有仓库。 NEXUS REPOSITORY MANAGER 3 是一个仓库管理系统。 下载NEXUS3 官网上是无法下载的,所以网上搜nexus-3.18.1-01-win64就能搜到,下载即可。 安装NEXUS3 下载nexus-3.18.0-01-win64.zip至相应目录下(路径不要有中文)。 …...

PostgreSql 参数配置

一、访问控制参数配置 https://xiaosonggong.blog.csdn.net/article/details/124264877 二、数据库参数配置 2.1 概述 PostgreSQL 的参数配置参数是在 postgresql.conf 文件中集中管理的&#xff0c;类似于 Oracle 的 pfile 文件&#xff0c;除此之外&#xff0c;PostgreSQL…...

【BMC】OpenBMC开发基础2:修改原有程序

修改原有程序 通常情况下我们会需要修改OpenBMC原有的程序来适配我们的项目&#xff0c;本节将介绍一般的流程。 为此首先我们需要了解devtool这个工具&#xff0c;注意它不是前端开发用的那个devtool&#xff0c;而是由OE&#xff08;或者Yocto&#xff1f;&#xff09;提供…...

2012年数学建模竞赛脑卒中发病环境因素分析及干预日期数据处理代码

因四个表格日期数据处理有些复杂&#xff0c;故作此代码一次性处理四组数据&#xff1a; import datetime import pandas as pddef check(string, df, i, num, error_list):if is_valid(pd.to_datetime(string, errorscoerce, format%Y/%m/%d), error_list, i):df.iloc[i, nu…...

Merge和Rebase的区别

Merge 和 Rebase 是 Git 中常用的两种分支整合方式&#xff0c;它们具有不同的工作原理和效果&#xff1a; Merge&#xff08;合并&#xff09; 合并是将两个或多个分支的提交历史合并为一个新的提交。在合并时&#xff0c;Git 会创建一个新的合并提交&#xff0c;将两个分支…...

[RTKLIB]模糊度固定相关问题(二)

文章目录 一、固定模糊度的前置工作1. 做好固定模糊度的准备2. 建立双差模糊度3. 问题与总结 版权声明&#xff1a;本文为原创文章&#xff0c;版权归 Winston Qu 所有&#xff0c;转载请注明出处。 在上一篇文章中&#xff0c;介绍了RTKLIB中manage_amb_LAMBDA()函数&#xff…...

QtAV for ubuntu16.04

下载ubuntu https://releases.ubuntu.com/16.04/ubuntu-16.04.7-desktop-amd64.iso 下载ffmpeg https://ffmpeg.org/download.html 下载QtAV https://github.com/wang-bin/QtAV/releases 更新 sudo apt update 安装库 sudo apt-get install libglu1-mesa-dev freeglut3-dev…...

MFC 文件读写包括字符串的结构体

试过CString char* 写入的都是地址 struct Param{int ID;int index;char val[128]; };vector<Param>ans; UINT count 17; ans.resize(count); FILE* fp; fopen_s(&fp,_T("my.txt"),_T("rb")); if(count ! fread(&ans[0],sizeof(Param),cou…...

在家构建您的迷你聊天Chat gpt

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建可编辑的3D应用场景 什么是指令遵循模型&#xff1f; 语言模型是机器学习模型&#xff0c;可以根据句子的前一个单词预测单词概率。如果我们向模型请求下一个单词&#xff0c;并将其递减地反馈给模型以请求更多单词&#xff…...

pytest自动化测试框架之断言

前言 断言是完整的测试用例中不可或缺的因素&#xff0c;用例只有加入断言&#xff0c;将实际结果与预期结果进行比对&#xff0c;才能判断它的通过与否。 unittest 框架提供了其特有的断言方式&#xff0c;如&#xff1a;assertEqual、assertTrue、assertIn等&#xff0c;py…...

C++模板的用法

目录 模板的概念 函数模板&#xff08;Function Templates&#xff09; 基本用法 函数模板的实例化 匹配原则 类模板&#xff08;Class Templates&#xff09; 模板的概念 C中的模板&#xff08;Templates&#xff09;实际上是一种泛型编程&#xff08;Generic Programm…...

ESP 32 蓝牙虚拟键盘链接笔记本电脑的键值问题

由于打算利用esp32 通过蓝牙链接电脑后实现一些特俗的键盘功能&#xff0c;所以就折腾了一下&#xff0c;折腾最耗费时间的却是键值问题&#xff0c;让一个20多年的老司机重新补充了知识 过程曲折就不说了&#xff0c;直接说结果。 我们通过网络搜索获取的键值和蓝牙模拟键盘传…...

128.【Maven】

Maven仓库 (一)、Maven 简介1.传统项目管理的缺点2.Maven是什么3.Maven的作用 (二)、Maven 的下载与安装1.下载与认识目录2.配置Maven的全局环境 (三)、Maven 的基础概念1.Maven 仓库(1).仓库分类 2. Maven 坐标3.Maven 本地仓库配置(1).改变默认的仓库地址(2).改变远程仓库地址…...

嵌入式虚拟仿真实验教学平台之串口发送数据

嵌入式虚拟仿真实验教学平台课程系列 串口发送数据实验 课程内容 本实验使用 STM32 的串口发送数据。开始仿真后,打开串口监视器&#xff0c;串口监视器会打印出要发送的数据。 课程目标 学习配置使用GPIO功能学习配置使用复用功能学习配置使用UART功能 硬件设计 本课程…...

网站维护的要求/新冠疫情最新情况

单项选择题 1、网络保险能解除传统保险中客户与保险机构的时间、空间制约主要体现的方式是&#xff08; &#xff09; &#xff08;2 分&#xff09; A&#xff0e;一个网址 B&#xff0e;一对多 C&#xff0e;一对一 D&#xff0e;一个服务器 2、P2P网络借贷是&#xff08; &a…...

建设工程资料网站/网站seo优化免费

可参考&#xff1a; https://www.zhihu.com/question/28592239 杨立华老师是本科期间最喜欢也是最敬佩的老师之一了。除了楼上说的长得帅、讲课好之外&#xff0c;最喜欢的就是杨立华老师的气质了。 杨立华老师身上有一种气质&#xff0c;有一种看透本质的目光和洞见&#xf…...

大学生做网站怎么赚钱/杭州千锋教育地址

作者很直男&#xff0c;兄弟们直接复制代码看效果吧&#xff01;&#xff01;&#xff01; 一些小细节&#xff0c;大家可以自己动手修改。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"…...

网站源码开发/重庆今日头条新闻消息

容易被遗忘的十种健康食物常常有的人会抱怨&#xff0c;可供选择的食物实在太少了&#xff0c;总是吃不到好吃的新奇的东西。但事实是否真的如此呢&#xff1f;我们总是因为自己生活的局限性而去追寻其他不容易得到的美味&#xff0c;而忽略了那些就近在身边的对我们有益的东西…...

班级网站中个人简介怎么做/电脑培训

PROXMOX6.3.6 更改机器名称 参考链接 https://www.baidu.com/link?urlljbh9wHn6YRho6nxxBdbydXNZ3vDERHVZF98SqkDNxJagu4NCtTfvnz5NilOiqqs-peS57O0v5z1t7r2-Zy2dhGQ7D5oIilOM6guFO9uTIa&wd&eqida61791420001d917000000066083e127 参考这个链接准备不停机修改主机名…...

网站设置安全/百度霸屏推广一般多少钱

一个小型的网站&#xff0c;比如个人网站&#xff0c;可以使用最简单的html静态页面就实现了&#xff0c;配 合一些图片达到美化效果&#xff0c;所有的页面均存放在一个目录下&#xff0c;这样的网站 对系统架构、性能的要求都很简单&#xff0c;随着互联网业务的不断丰富&…...