string 的完整介绍

news2024/12/28 6:03:29

1.string

还记得我们数据结构学的串吗,现在在c++中,我们有了c++提供的标准库,它是一个写好的类,非常方便使用

1. string是表示字符串的字符串类

2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。

3. string在底层实际是:basic_string模板类的别名,typedef basic_string<char, char_traits, allocator>

string;

4. 不能操作多字节或者变长字符的序列。

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

另外要提一嘴的就是,我们人类的语言与计算机的语言不一样,所以美国发明了ASCLL码表,这样计算机就能我们输入的东西是什么,记着就有各种的字符编码,有unicode,gbk等等,仅作了解。

2.string的常见接口说明

2.1string类对象的常见构造

void Test()
{
	string s1;//空字符串
	//string s2("hello ss");
     string s2="hello ss";//涉及隐式类型转换 string(const char* s)
	string s3(s2);//string(const string& s)
	//
	string s4(s2, 1, 5);//从pos位置开始拷贝len长度
	string s5(s2, 2);//string(const string& s,size_t pos,size_t len=npos)

	string s6(s2, 4);
	string s7(5, '8');
	cout << s1 << endl;
	cout << s2 << endl;
	cout << s3 << endl;
	cout << s4 << endl;
	cout << s5 << endl;
	cout << s6 << endl;
	cout << s7 << endl;
	
}

 我们简单应用一下,这就是string的构造,值得一提的就是len=npos这个是什么意思呢,就是如果不给长度,就从pos的位置一直拷贝下去,因为它的类型是size_t,npos等于负一,所以是一个非常大的数默认拷贝到结束。

2.2

函数名称 功能说明
size(重点)  返回字符串有效字符长度
length             返回字符串有效字符长度
capacity          返回空间总大小
empty (重     检测字符串释放为空串,是返回true,否则返回false
clear (重       清空有效字符
reserve (重   为字符串预留空间**
resize (重      将有效字符的个数该成n个,多出的空间用字符c填充

前面都都比较简单,就是基本的类型,我们简单学习一下 reserve resize  clear

reserve : 它的作用就是扩容,但是不能缩容。在vs平台下string 的容量是有一个15个的类似与数组的,所以一上来就是15个

resize:它的作用是类似于初始化一样,改变size为n,如果存储数据就不改变,没有存储就会以穿过的字符初始化

clear:就是清空字符串

注意:
1. size()与length()方法底层实现原理完全相同,引入size()的原因是为了与其他容器的接口保持一
致,一般情况下基本都是用size()。
2. clear()只是将string中有效字符清空,不改变底层空间大小。
3. resize(size_t n) 与 resize(size_t n, char c)都是将字符串中有效字符个数改变到n个,不同的是当字
符个数增多时:resize(n)用0来填充多出的元素空间,resize(size_t n, char c)用字符c来填充多出的
元素空间。注意:resize在改变元素个数时,如果是将元素个数增多,可能会改变底层容量的大
小,如果是将元素个数减少,底层空间总大小不变。
4. reserve(size_t res_arg=0):为string预留空间,不改变有效元素个数,当reserve的参数小于
string的底层空间总大小时,reserver不会改变容量大小。

 3.string类对象的访问及遍历操作

string的遍历,一共有三种方式

第一种用的是类似于数组的[],在c++中进行了重载操作符。

const string s = "wanglina";
for (size_t i = 0; i < s.length(); i++)
{
	cout << s[i] << " ";
}

第二种 迭代器,这个方法适合于所有的结构的遍历,栈,队列等等

string::const_iterator ss = s.begin();
while (ss != s.end())//这里要用地址比较,如果比较字符,会出现越界访问,并且可能提前结束
{
	cout << *ss << " ";
	ss++;
}

第三种 范围for遍历

for (auto e: s)
{
	cout << e << " ";
}
//写范围for的话更推介写const auto &
for(const auto& e:s)

运行结果都是一样的

我们这里这个迭代器的写法,可以用auto直接让编译器进行推算,但是我们学习要知道它的本质是什么

 细心的观众已经发现,我有的写了const 有的string没写const,这是基于c++string的在迭代器实现分为有const和没有const两种,在使用的时候,调用哪个方便就调用哪个

iterator 可读可改

const_iterator 只读 相当于指针里的const int*  不能修改迭代器指向的内容,但是类似地址可以改否则没法遍历

const  iterator   相当于int const *

4string类对象的修改操作

4.1+=

+= :串的+=就是两个字符串的合并在一起,这属于运算符的重载

insert:插入 字符串,strig类 字符等等

 append:类似于尾插,不过尾插各种东西

如果尾插的话,不如用+=,很少用append

erase:从pos位置,删除len长的字符串

 

Swap: 交换两个字符串,全局里面也有一个swap,但是尽量用string里面的,因为全局的Swap会拷贝一个中间变量,然后像我们交换两个整数的那种写法一样,消耗巨大。

5对对象的操作

find: 寻找字符,stirng类 字符串都可以,返回下标。rind就是从末尾开始查找,返回查找到的第一个 位置。

 substr:截取字符串,以string形式返回

利用算法库里的帮助我们实现sort功能

string s1 = "hello wanglina";
sort(s1.begin(),s1.end());
cout << s1 << endl;

 太方便了是不是,记得引用算法头文件 algorithm

在数组中,我们可以通过[下标]访问数组内容,在c++中,string进行了运算符重载,[]也可以访问string,但是这个运算符重载,多了一项功能,就是帮助我们检查我们访问的下标大不大于我们的sz,就是字符串长度 

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

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

相关文章

被边缘化后:飞猪“摆烂”,庄卓然求变?

文&#xff1a;互联网江湖 作者&#xff1a;刘致呈 走向独立的飞猪&#xff0c;在最近两年是越来越放飞自我了。 从“酱香大床房”的硬蹭热度&#xff0c;到“攻城价”被京都威斯汀酒店声明“打假”&#xff1b; 从年初的大数据杀熟争议&#xff0c;到最近被12036退票点名&a…

VLM技术介绍

1、背景 视觉语言模型&#xff08;Visual Language Models&#xff09;是可以同时从图像和文本中学习以处理许多任务的模型&#xff0c;从视觉问答到图像字幕。 视觉识别&#xff08;如图像分类、物体保护和语义分割&#xff09;是计算机视觉研究中一个长期存在的难题&#xff…

据传 OpenAI秘密研发“Strawberry”项目

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

ollama + lobechat 搭建自己的多模型助手

背景 人工智能已经推出了快2年了&#xff0c;各种模型和插件&#xff0c;有渐渐变成熟的趋势&#xff0c;打造一个类似 hao123网站的人工智能模型入口&#xff0c;也变得有需求了。用户会去比较多个ai给出的答案&#xff0c;作为程序员想拥有一台自己的GPU服务器来为自己服务。…

GuLi商城-商品服务-API-品牌管理-统一异常处理

每个方法都加这段校验太麻烦了 准备做一个统一异常处理@ControllerAdvice 后台代码: package com.nanjing.gulimall.product.exception;import com.nanjing.common.exception.BizCodeEnum; import com.nanjing.common.utils.R; import lombok.extern.slf4j.Slf4j; import org…

【UE5.1】Chaos物理系统基础——06 子弹破坏石块

前言 在前面我们已经完成了场系统的制作&#xff08;【UE5.1】Chaos物理系统基础——02 场系统的应用_ue5&#xff09;以及子弹的制作&#xff08;【UE5.1 角色练习】16-枪械射击——瞄准&#xff09;&#xff0c;现在我们准备实现的效果是&#xff0c;角色发射子弹来破坏石柱。…

【算法】单调队列

一、什么是单调队列 单调队列是一种数据结构&#xff0c;其特点是队列中的元素始终保持单调递增或递减&#xff0c;主要用于维护队列中的最小值或最大值。 不同于普通队列只能从队头出队、队尾入队&#xff0c;单调队列为了维护其特征&#xff0c;还允许从队尾出队 不管怎么…

【学习笔记】4、组合逻辑电路(上)

数字电路的分类&#xff1a;组合逻辑电路&#xff0c;时序逻辑电路。本章学习组合逻辑电路。 4.1 组合逻辑电路的分析 给定的逻辑电路&#xff0c;确定其逻辑表达式&#xff0c;列出真值表&#xff0c;得到简化后的逻辑表达式&#xff0c;分析得到其功能。 3位奇校验电路 &…

OSPF.综合实验

1、首先将各个网段基于172.16.0.0 16 进行划分 1.1、划分为4个大区域 172.16.0.0 18 172.16.64.0 18 172.16.128.0 18 172.16.192.0 18 四个网段 划分R4 划分area2 划分area3 划分area1 2、进行IP配置 如图使用配置指令进行配置 ip address x.x.x.x /x 并且将缺省路由…

MQTT——Mosquitto使用(Linux订阅者+Win发布者)

前提&#xff1a;WSL&#xff08;Ubuntu22&#xff09;作为订阅者&#xff0c;本机Win10作为发布者。 1、Linux安装Mosquitto 命令行安装。 sudo apt-get install mosquitto 以上默认只安装了mosquitto的服务&#xff0c;不带测试客户端工具mosquitto_sub和mosquitto_pub。如…

持续学习中避免灾难性遗忘的Elastic Weight Consolidation Loss数学原理及代码实现

训练人工神经网络最重要的挑战之一是灾难性遗忘。神经网络的灾难性遗忘&#xff08;catastrophic forgetting&#xff09;是指在神经网络学习新任务时&#xff0c;可能会忘记之前学习的任务。这种现象特别常见于传统的反向传播算法和深度学习模型中。主要原因是网络在学习新数据…

全网最详细单细胞保姆级分析教程(二) --- 多样本整合

上一节我们研究了如何对单样本进行分析,这节我们就着重来研究一下如何对多样本整合进行研究分析! 1. 导入相关包 library(Seurat) library(tidyverse) library(patchwork)2. 数据准备 # 导入单样本文件 dir c(~/Desktop/diversity intergration/scRNA_26-0_filtered_featur…

基于TCP的在线词典系统(分阶段实现)(阻塞io和多路io复用(select)实现)

1.功能说明 一共四个功能&#xff1a; 注册 登录 查询单词 查询历史记录 单词和解释保存在文件中&#xff0c;单词和解释只占一行, 一行最多300个字节&#xff0c;单词和解释之间至少有一个空格。 2.功能演示 3、分阶段完成各个功能 3.1 完成服务器和客户端的连接 servic…

WAF基础介绍

WAF 一、WAF是什么&#xff1f;WAF能够做什么 二 waf的部署三、WAF的工作原理 一、WAF是什么&#xff1f; WAF的全称是&#xff08;Web Application Firewall&#xff09;即Web应用防火墙&#xff0c;简称WAF。 国际上公认的一种说法是&#xff1a;Web应用防火墙是通过执行一…

电表及销售统计Python应用及win程序2

接着上一篇给代码添加了表格功能&#xff0c;方便更好的处理数据。 import json import os from datetime import datetime from tkinter import * from tkinter import messagebox from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg from matplotlib.figure …

JAVA设计模式>>结构型>>适配器模式

本文介绍23种设计模式中结构型模式的适配器模式 目录 1. 适配器模式 1.1 基本介绍 1.2 工作原理 1.3 适配器模式的注意事项和细节 1.4 类适配器模式 1.4.1 类适配器模式介绍 1.4.2 应用实例 1.4.3 注意事项和细节 1.5 对象适配器模式 1.5.1 基本介绍 1.5.2 …

visual studio 2019版下载以及与UE4虚幻引擎配置(过程记录)(官网无法下载visual studio 2019安装包)

一、概述 由于需要使用到UE4虚幻引擎&#xff0c;我使用的版本是4.27版本的&#xff0c;其官方默认的visual studio版本是2019版本的&#xff0c;相应的版本对应关系可以通过下面的官方网站对应关系查询。https://docs.unrealengine.com/4.27/zh-CN/ProductionPipelines/Develo…

java实现资产管理系统图形化用户界面

创建一个&#x1f495;资产管理系统的GUI&#xff08;图形用户界面&#xff09;❤️画面通常需要使用Java的Swing或者JavaFX库。下面我将提供一个简单的资产管理系统GUI的示例代码&#xff0c;使用Java Swing库来实现。这个示例将包括一个主窗口&#xff0c;一个表格来显示资产…

捷配笔记-如何设计PCB板布线满足生产标准?

PCB板布线是铺设连接各种设备与通电信号的路径的过程。PCB板布线是铺设连接各种设备与通电信号的路径的过程。 在PCB设计中&#xff0c;布线是完成产品设计的重要步骤。可以说&#xff0c;之前的准备工作已经为它做好了。在整个PCB设计中&#xff0c;布线设计过程具有最高的极限…

Web浏览器通过串口读取RFID卡号js JavaScript

本示例使用的读卡器&#xff1a;USB转RS232COM虚拟串口RFID读卡器主动读卡Web浏览器Andro、Linux-淘宝网 (taobao.com) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"…