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

【C++】string类(上)

文章目录

  • 1.为什么要学习string类
  • 2.标准库中的string类
    • 1.string分类
    • 2.string类对象的常见构造
      • 1.string
    • 3. string类对象的容量操作
      • 1.size
      • 2.capacity
      • 3.reserve
      • 4.resize
        • 扩容+初始化
        • 删除数据
    • 4. string类对象的修改操作
      • 1.push_back
      • 2.append
      • 3.operator+=

1.为什么要学习string类

  • c语言的字符串是以’\0’结尾的一些字符的集合,比如存储你的家庭住址,修改成为新的住址,原来的住址短,现在的住址长,之前的字符串数组存不下,不能很好按需修改
  • c++提供一个类来管理字符串,这个类就叫string

2.标准库中的string类

1.string分类

  • string 是一个类模板,原型是一个 basic_string的类模板由typedef成为string

  • char(重点使用)

  • char:1个字节 ,即一个字符1个字节

  • 宽字符存在(使用相对偏少)
  • wchar_t :2个字节 ,即一个字符2个字节

  • C++11提供u16string和u32string(了解)

  • char16_t:2个字节 即一个字符2个字节


  • char32_t: 4个字节 即一个字符4个字节

  • 上述多种string形式说明有管理不同字符数组的需求
  • ASCII是美国标准信息交换代码,用来在计算机里面存储和显示英文信息,通过26个字母、数字、标点符号,来建立关系形成映射表从而生成了编码表,调用对应的ASCII值来生成对应的符号,ASCII表只有128个字符,一个字节8个bit位就够了
  • 为了支持显示除了英文以外的文字显示,就发明出了unicode (万国码),为每种语言的每个字符设定了统一并且唯一的二进制编码

在这里插入图片描述

  • 使用2个字节进行统一编码
    在这里插入图片描述
  • 使用4个字节进行统一编码
  • UTF-16对应u16string ,UTF-32对应 u32string

2.string类对象的常见构造

  • 必须包含头文件< string >

1.string

  • string()——构造空的string类对象,即空字符串
  • string(const char*s) ——用常量字符串构造string字符串
#include<iostream>
#include<string>
using namespace std;
int main()
{string s1;string s2("hello");//遍历数组并使每个字符+1for (size_t i = 0; i < s2.size();i++){s2[i]++;}cout << s2 << endl;// 通过重载流提取(<<),string可以直接进行打印//ifmmpreturn 0;
}
  • string(const string&str,size_t pos,size_t len=npos);—— 拷贝str从pos开始的len个字符
    如果len长度大于pos位置后的字符个数,则有多少取多少
    若len没有给值,则会自动默认缺省值npos
    size_t npos=-1,由于是无符号整形,实际上是-1的补码即整形最大值
#include<iostream>
#include<string>
using namespace std;
int main()
{string s1("hello world");string s2(s1, 6, 5);//拷贝s1从第6个位置开始取5个字符string s3(s1, 6, 15);//由于pos为指向后取只有5个字符,小于15,有多少取多少string s4(s1, 6);//len缺省值为整形最大值,则一直从pos位置取到结尾
cout<<s2<<endl;
cout<<s3<<endl;
cout<<s4<<endl;
}
  • string(size_t n,char c); ——填string类对象前n个字符
int main()
{string s(10, '.');// 前10个字符为 .cout << s << endl;//..........return 0;
}

3. string类对象的容量操作

1.size

#include<iostream>
#include<string>
using namespace std;
int main()
{string s("hello world");cout << s.size() << endl;//11cout << s.length() << endl;//11return 0;
}
  • size和length两者功能相同,由于string发展历史造成的,最开始字符串的长度为length,后来为了和数据结构其他保持一致使用size更符合,所以推荐使用size

2.capacity

#include<iostream>
#include<string>
using namespace std;
int main()
{string s("hello world");cout << s.size() << endl;//11cout << s.capacity() << endl;//15return 0;
}
  • 有11个字符,但是空间大小为15(不包含/0)

3.reserve

#include<iostream>
#include<string>
using namespace std;
//扩容问题
int main()
{string s;//s.reserve(100);//提前开辟100个空间size_t sz = s.capacity();//sz代表原来的容量cout << "making a grow" << endl;for (int i = 0; i < 100; i++){s.push_back('c');//不断在字符串后插入字符cif (sz != s.capacity())//扩容后,将sz值更新{sz = s.capacity();cout << "capacity changed:" << sz << endl;}}
}

在这里插入图片描述

  • 提前开辟空间,减少扩容,提高效率

#include<iostream>
#include<string>
using namespace std;
int main()
{string s("hello");s.reserve(100);cout << s.size() << endl;//5cout << s.capacity() << endl;//111return 0;
}
  • reserve只会改变capacity,不会改变size
  • size值没有改变依旧为5,capacity被提前开辟100个空间

4.resize

扩容+初始化

#include<iostream>
#include<string>
using namespace std;
int main()
{string s("hello");s.resize(100);cout << s.size() << endl;//100cout << s.capacity() << endl;//111return 0;
}
  • reserve既改变capacity,也会改变size
  • size值被改变为100,被修改的部分填的是缺省值’\0’,
    capacity值也被改变为111

#include<iostream>
#include<string>
using namespace std;
int main()
{string s("hello");s.resize(10,'x');//将size修改的值填成xreturn 0;
}
  • 可以手动添加字符填成自己想给的值

删除数据

#include<iostream>
#include<string>
using namespace std;
int main()
{string s("hello");s.resize(2);//2<5,所以只保留前2个字符 cout << s << endl;//hecout << s.capacity() << endl;//15return 0;
}
  • 若resize值小于size值,可以删除数据,但不会改变容量

4. string类对象的修改操作

1.push_back

  • 在字符串后插入字符
#include<iostream>
#include<string>
using namespace std;
int main()
{string s("hello");s.push_back(' ');s.push_back('!');cout << s << endl;//hello !return 0;
}

2.append

  • 字符串后插入字符串
#include<iostream>
#include<string>
using namespace std;
int main()
{string s("hello");s.append(" world!");cout << s << endl;//hello world!return 0;
}

3.operator+=

  • 字符串后插入字符/字符串/对象
#include<iostream>
#include<string>
using namespace std;
int main()
{string s("hello");s += ' ';//字符s+='!';s += "world";//字符串string s2("abc");s += s2;//对象cout << s << endl;//hello !worldabcreturn 0;
}

相比于push_back 插入字符和append插入字符串,operator+=方式更容易使用

相关文章:

【C++】string类(上)

文章目录1.为什么要学习string类2.标准库中的string类1.string分类2.string类对象的常见构造1.string3. string类对象的容量操作1.size2.capacity3.reserve4.resize扩容初始化删除数据4. string类对象的修改操作1.push_back2.append3.operator1.为什么要学习string类 c语言的字…...

Java泛型

文章目录一、泛型介绍1. 背景2. 概念3. 好处二、泛型声明泛型类型符号泛型声明方式三、类型擦除1. 什么是类型擦除桥接方法2. 为何需要类型擦除3. 类型信息并未完全擦除四、泛型使用1. 泛型类2. 泛型接口3. 泛型方法五、泛型扩展1. 泛型的上下边界泛型的上边界泛型的下边界2. 泛…...

07 分布式事务Seata使用(2)

1、Seata是什么 Seata 是一款开源的分布式事务解决方案&#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式&#xff0c;为用户打造一站式的分布式解决方案。AT模式是阿里首推的模式,阿里云上有商用版本的GTS&#x…...

c++练习题5

5.在C语言中&#xff0c;程序运行期间&#xff0c;其值不能被改变的量叫 常量 。 6.符号常量是指用一个符号名代表一个常量。 7&#xff0e;整型常量和浮点型常量也称为 数值常量 &#xff0c;它们有正负之分。 9&#xff0e;在C中&#xff0c;变量是 其值可以改变的量 。 …...

Python 高级编程之正则表达式(八)

文章目录一、概述二、正则表达式语法1&#xff09;字符匹配2&#xff09;字符集合3&#xff09;定位符4&#xff09;分组1、定义分组2、引用分组3、命名分组三、Python 的 re 模块1&#xff09;re.match() 方法2&#xff09;re.search() 方法3&#xff09;re.match() 与 re.sea…...

pynrrd常用操作解析

目录依赖安装官方文档常用操作1. 读部分nrrd.read()nrrd.read_header()nrrd.read_data()2. 写部分nrrd.write()依赖安装 pip install pynrrd官方文档 https://pynrrd.readthedocs.io/en/stable/ 常用操作 1. 读部分 nrrd.read() nrrdpath "your nrrd file path"…...

数据结构:链表基础OJ练习+带头双向循环链表的实现

目录 一.leetcode剑指 Offer II 027. 回文链表 1.问题描述 2.问题分析与求解 (1) 快慢指针法定位链表的中间节点 (2) 将链表后半部分进行反转 附:递归法反转链表 (3) 双指针法判断链表是否回文 二.带头双向循环链表的实现 1.头文件 2.节点内存申请接口和链表初始化接口…...

计算机视觉方向地理空间遥感图像数据集汇总

文章目录1.DSTL卫星图像数据集/Kaggle竞赛2.Swimming Pool and Car Detection/Kaggle竞赛3.SpaceNet Challenge 3数据集4.RarePlanes数据集5.BigEarthNet数据集6.NWPU VHR-10数据集7.UC Merced Land-Use数据集8.Inria Aerial Image Labeling数据集9.RSOD数据集1.DSTL卫星图像数…...

信息系统项目管理师真题精选(一)

1.信息系统的&#xff08; &#xff09;决定了系统可以被外部环境识别&#xff0c;外部环境或者其他系统可以按照预定的方法使用系统的功能或者影响系统的行为。A.可嵌套性B.稳定性C.开放性D.健壮性2、在实际的生产环境中&#xff0c;&#xff08; &#xff09;能使底层物理硬件…...

信息系统项目管理师刷题知识点(持续更新)

主要记录自己在备考高项过程中知识点 信息系统项目管理师刷题知识点&#xff08;按刷题顺序排列&#xff09; 1.信息技术应用是信息化体系六要素中的龙头&#xff0c;是国家信息化建设的主阵地&#xff0c;集中体现了国家信息化建设的需求和效益。 2.原型化方法也称为快速原型法…...

RabbitMq及其他消息队列

消息队列中间价都有哪些 先进先出 Kafka、Pulsar、RocketMQ、RabbitMQ、NSQ、ActiveMQ Rabbitmq架构 消费推拉模式 客户端消费者获取消息的方式&#xff0c;Kafka和RocketMQ是通过长轮询Pull的方式拉取消息&#xff0c;RabbitMQ、Pulsar、NSQ都是通过Push的方式。 pull类型…...

Toolformer: Language Models Can Teach Themselves to Use Tools

展示了LM可以通过简单的API教自己使用外部工具&#xff0c;并实现两个世界的最佳效果。我们介绍了Toolformer&#xff0c;这是一个经过训练的模型&#xff0c;可以决定调用哪些API&#xff0c;何时调用&#xff0c;传递哪些参数&#xff0c;以及如何将结果最好地纳入未来的标记…...

悲观锁与乐观锁

何谓悲观锁与乐观锁 乐观锁对应于生活中乐观的人总是想着事情往好的方向发展&#xff0c;悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展。这两种人各有优缺点&#xff0c;不能不以场景而定说一种人好于另外一种人。 悲观锁 总是假设最坏的情况&#xff0c;每次去拿数据…...

LeetCode 25. K 个一组翻转链表

原题链接 难度&#xff1a;hard\color{red}{hard}hard 题目描述 给你链表的头节点 headheadhead &#xff0c; kkk 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 kkk 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 kkk 的整数倍&#xf…...

朗润国际期货招商:历次科技风头下巨头的博弈

历次科技风头下巨头的博弈 VR/AR、区块链、折叠屏、元宇宙、AIGC五轮科技风头下巨头们都进场了吗&#xff1f; VR/AR硬件 谷歌&#xff1a;2014年入局&#xff0c;推出AR眼镜 百度&#xff1a;未入局 京东&#xff1a;未入局 腾讯&#xff1a;传要开发 亚马逊&#xff1…...

配置中心Config

引入依赖<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.6.RELEASE</version></parent><properties><spring-cloud.version>Finchley.SR…...

【原创】java+jsp+servlet学生信息管理系统(jdbc+ajax+filter+cookie+分页)

一直想写一个比较基础的JavaWeb项目&#xff0c;然后综合各种技术&#xff0c;方便Java入门者进行学习。学生信息管理系统大家一般接触的比较多&#xff0c;那么就以这个为例来写一个基础项目吧。 需求分析&#xff1a; 使用jspservletmysql开发的学生信息管理系统&#xff0…...

链表题目总结 -- 回文链表

目录一. 从中心开始找最大的回文字符串1. 思路简述2. 代码3. 总结二. 判断是否为回文字符串1. 思路简述2. 代码3.总结三. 判断是否是回文链表1. 思路简述2. 代码3. 总结4. 优化解法一. 从中心开始找最大的回文字符串 题目链接&#xff1a;没有。给定一个字符串s&#xff0c;从…...

JAVA集合之List >> Arraylist/LinkedList/Vector结构

在Java开发过程中&#xff0c;可能经常会使用到List作为集合来使用&#xff0c;List是一个接口承于Collection的接口&#xff0c;表示着有序的列表。而我们要讨论的是它下面的实现类Arraylist/LinkedList/Vector的数据结构及区别。 ArrayList ArrayList&#xff1a;底层为数组…...

Linux多进程开发

一、进程概述 1、程序和进程 程序是包含一系列信息的文件&#xff0c;这些信息描述了如何在运行时创建一个进程&#xff1a; 二进制格式标识&#xff1a;每个程序文件都包含用于描述可执行文件格式的元信息。内核利用此信息来解释文件中的其他信息。&#xff08;ELF可执行连…...

Stable Diffusion像素艺术工作流:Pixel Fashion Atelier预设Prompt指令集详解

Stable Diffusion像素艺术工作流&#xff1a;Pixel Fashion Atelier预设Prompt指令集详解 1. 像素艺术创作新体验 Pixel Fashion Atelier为设计师和艺术创作者带来了一种全新的像素艺术创作方式。这个基于Stable Diffusion与Anything-v5的工作站&#xff0c;将复古日系RPG的视…...

OpenClaw性能调优:RTX4090D环境下Qwen3-32B-Chat的并发控制

OpenClaw性能调优&#xff1a;RTX4090D环境下Qwen3-32B-Chat的并发控制 1. 为什么需要关注OpenClaw的并发性能 上周我在本地部署了Qwen3-32B-Chat模型&#xff0c;准备用OpenClaw实现一个自动化内容处理流程。当我同时触发文件整理、网页检索和报告生成三个任务时&#xff0c…...

【超全】2026年3月OpenClaw(Clawdbot)京东云5分钟新手搭建流程

【超全】2026年3月OpenClaw&#xff08;Clawdbot&#xff09;京东云5分钟新手搭建流程。OpenClaw怎么部署&#xff1f;本文面向零基础用户&#xff0c;完整说明在轻量服务器与本地Windows11、macOS、Linux系统中部署OpenClaw&#xff08;Clawdbot&#xff09;的流程&#xff0c…...

PPPOSClient:ESP32上轻量级GSM PPP over Serial客户端实现

1. PPPOSClient 库深度解析&#xff1a;面向 ESP32 的 GSM PPPoS 协议客户端实现1.1 库定位与工程价值PPPOSClient 是一个专为嵌入式物联网终端设计的轻量级 GSM 网络接入中间件&#xff0c;其核心价值在于将底层 PPP over Serial&#xff08;PPPoS&#xff09;协议栈与上层应用…...

ESP32智能LED驱动库:RMT与SPI硬件加速原理

1. 项目概述 SmartLeds 是一个专为 ESP32 平台设计的轻量级、高性能智能 LED 驱动库&#xff0c;其核心目标是提供一种 简单、直观且硬件加速 的方式&#xff0c;统一控制多种主流可寻址 LED&#xff08;Addressable LEDs&#xff09;。该库并非基于通用 GPIO 模拟时序的软件…...

用雪花算法就不会产生重复的ID?

今天想和大家聊聊分布式系统中常用的雪花算法&#xff08;Snowflake&#xff09;——这个看似完美的ID生成方案&#xff0c;实际上暗藏玄机。有些小伙伴在工作中一提到分布式ID&#xff0c;第一个想到的就是雪花算法。确实&#xff0c;它简单、高效、趋势递增&#xff0c;但你知…...

Langflow场景化部署指南:为不同用户定制的安装方案

Langflow场景化部署指南&#xff1a;为不同用户定制的安装方案 【免费下载链接】langflow ⛓️ Langflow 是 LangChain 的用户界面&#xff0c;使用 react-flow 设计&#xff0c;旨在提供一种轻松实验和原型设计流程的方式。 项目地址: https://gitcode.com/GitHub_Trending/…...

lychee-rerank-mm与PyTorch集成:构建自定义多模态模型

lychee-rerank-mm与PyTorch集成&#xff1a;构建自定义多模态模型 1. 引言 多模态AI正在改变我们处理信息的方式&#xff0c;但如何让模型真正理解图文之间的复杂关系&#xff0c;一直是个技术难点。想象一下这样的场景&#xff1a;你的电商平台需要将用户上传的商品图片与海…...

数组指针和二级指针之间的区别和用法

一.数组指针形为&#xff1a;int &#xff08;*p&#xff09;[x] NULL(x为所指向的一维数组的大小);p指向一个行向量&#xff08;二维数组&#xff09;的数组名。例如&#xff1a;int array[][3] {{1,1,2},{2,3,4}};int (*p)[3] array;遍历这个二维数组,可利用该指针来向函数…...

京东AI优势持续升级,京东的AI大棋局怎么看?

日前&#xff0c;京东媒体沟通会召开&#xff0c;会上&#xff0c;京东展示了其在大模型、数字人、AI硬件及企业级解决方案上的最新布局。这次畅谈让我们看到了更多的京东大棋局&#xff0c;京东的AI战略并非单纯的技术军备竞赛&#xff0c;而是一场围绕“降本增效”与“生态重…...