C++奇迹之旅:string类接口详解(上)

news2024/11/15 4:35:38

请添加图片描述

文章目录

  • 📝为什么学习string类?
    • 🌉 C语言中的字符串
    • 🌉string考察
  • 🌠标准库中的string类
  • 🌉string类的常用接口说明
    • 🌠string类对象的常见构造
  • 🚩总结


📝为什么学习string类?

🌉 C语言中的字符串

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

🌉string考察

OJ中,有关字符串的题目基本以string类的形式出现,而且在常规工作中,为了简单、方便、快捷,基本都使用string类,很少有人去使用C库中的字符串操作函数。

  1. 字符串相加
  2. 把字符串转换成整数 (atoi)

🌠标准库中的string类

官方通用网站:https://legacy.cplusplus.com/reference/string/string/
string类的文档介绍
在这里插入图片描述

std::string
typedef basic_string<char> string;

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

文档内容:
String 类:

  1. 字符串是表示字符序列的对象。
  2. 标准字符串类通过类似于标准字节容器的接口为此类对象提供支持,但添加了专门设计用于处理单字节字符字符串的功能。
  3. string 类是 basic_string 类模板的实例化,该模板使用 char(即字节)作为其字符类型,具有默认的 char_traitsallocator 类型(有关模板的详细信息,请参阅basic_string)。
  4. 请注意,此类独立于所使用的编码处理字节:如果用于处理多字节或可变长度字符(如 UTF-8)的序列,则此类的所有成员(如长度或大小)及其迭代器仍将以字节(而不是实际编码字符)为单位进行操作。

总结:

  1. string是表示字符串的字符串类
  2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。
  3. string在底层实际是:basic_string模板类的别名,typedef basic_string<char, char_traits, allocator> string;
  4. 不能操作多字节或者变长字符的序列。

🌉string类的常用接口说明

🌠string类对象的常见构造

在这里插入图片描述
在这里插入图片描述

string():构造空的string类对象,即空字符串

使用:

string s1; // 构造空的string类对象s1

string(const char* s) --> 用C-string来构造string类对象

使用:

string s2("hello C++");

string(const string&s) ----> 拷贝构造

使用:

string s2("hello C++");
string s3(s2);

string (const string& str, size_t pos, size_t len = npos); ---->复制从字符位置 pos 开始向后 len 长度的 str 部分

如果长度len比字符串长度str大,则复制字符串的末尾
len = 缺省值npos时,也是遍历复制到字符串尾部
在这里插入图片描述
此常量使用值 -1 定义,由于 size_t 是无符号整数类型,因此它是此类型的最大可能表示值:对于 unsigned int 类型, -1 会被解释为 4294967295(2^32 - 1)

#include<iostream>
using namespace std;

int main()
{
	string s1;
	string s2("hello C++");
	string s3(s2);

	string s4(s2, 2, 3);
	string s5(s2, 2, 30);

	cout << s1 << endl;
	cout << s2 << endl;
	cout << s3 << endl;
	cout << s4 << endl;
	cout << s5 << endl;
	return 0;
}

在这里插入图片描述

string (const char* s, size_t n); —>从 s 指向的字符数组中复制前 n 个字符。

使用:

string s6("hello C++", 4);
cout << s6 << endl;

输出:

hell

string (size_t n, char c); —>用字符 cn 个连续副本填充字符串。

使用:

string s7(4, 'x');
cout << s7 << endl;

输出:

xxxx

注意:string类已经有了流运算符重载,可以直接使用<<>>进行输出,无需再另外实现operator等重载函数
在这里插入图片描述


🚩总结

string():构造空的string类对象,即空字符串

string(const char* s) --> 用C-string来构造string类对象

string(const string&s) ----> 拷贝构造

string (const string& str, size_t pos, size_t len = npos); ---->复制从字符位置 pos 开始向后 len 长度的 str 部分

string (const char* s, size_t n); —>从 s 指向的字符数组中复制前 n 个字符。

string (size_t n, char c); —>用字符 cn 个连续副本填充字符串。
请添加图片描述

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

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

相关文章

Unity Navigation 入门(新版)

概述 在游戏的制作过程中&#xff0c;寻路功能一定是非常重要的部分&#xff0c;他可以为主角寻路&#xff0c;也可以运用到敌人追击等&#xff0c;相比于自己实现的难度&#xff0c;使用寻路组件就显得简单的多&#xff0c;那接下来就开始学习这部分的内容吧 1.安装AI Naviga…

vue3打开页面后文本框自动获得焦点

字符串写法 <script setup> import { ref, onMounted } from vue import ./index.cssconst input ref(null)onMounted(() > {input.value.focus() }) </script><template><div class"m-home-wrap"><input ref"input" />…

[NSSRound#1 Basic]basic_check

[NSSRound#1 Basic]basic_check 开题什么都没有&#xff0c;常规信息搜集也无效 发现题目允许PUT的两种做法&#xff1a; 1、 CURL的OPTIONS请求方法查看允许的请求方式 curl -v -X OPTIONS http://node4.anna.nssctf.cn:28545/index.php2、 kali自带的nikto工具扫描网址 Nik…

已经有 Prometheus 了,还需要夜莺?

谈起当下监控&#xff0c;Prometheus 无疑是最火的项目&#xff0c;如果只是监控机器、网络设备&#xff0c;Zabbix 尚可一战&#xff0c;如果既要监控设备又要监控应用程序、Kubernetes 等基础设施&#xff0c;Prometheus 就是最佳选择。甚至有些开源项目&#xff0c;已经内置…

css z-Index 详解--子元素盖在父元素的兄弟元素上

前置知识 1、z-index 只有在定位元素上才会生效&#xff08;即非static定位的元素上&#xff09; 2、同级元素&#xff0c;无论是z-index 相同还是没设置。后面的元素层级比前面 3、元素上有 transform 属性 z-index 会失效 dom结构如下 // dom部分 <div><div id&quo…

数学建模资料|历年数维杯数学建模竞赛真题及获奖论文汇总

2024年第九届数维杯大学生数学建模挑战赛&#xff1a;2024年5月10日08:00-5月13日09:00举行&#xff0c;为了更好的帮助参赛同学了解竞赛的赛制及赛题特点&#xff0c;数乐君今天给大家整理了历年数维杯国赛真题及优秀论文&#xff0c;方便同学们赛前巩固训练&#xff0c;掌握解…

私人健身教练预约管理小程序开发源码现成案例(小程序+APP+H5 源码部署)

一、私人健身教练预约管理系统-环境介绍 1.1 私人健身教练预约管理系统-运行环境 开发语言&#xff1a;PHP 数据库&#xff1a;MySQL 系统架构&#xff1a;TP 后端&#xff1a;SpringBoot 前端&#xff1a;Vue 2. 私人健身教练预约管理系统-系统介绍。 2.1私人健身教练预约管…

实在Agent智能体:引领智能自动化新纪元

在数字化转型的浪潮中&#xff0c;实在智能科技有限公司凭借其前沿技术&#xff0c;推出了实在Agent智能体——一款革命性的超自动化智能体。它不仅代表了人工智能技术的新高度&#xff0c;更预示着未来工作方式的变革。 什么是实在Agent智能体&#xff1f; 实在Agent智能体是…

拼多多投产比怎么计算?

拼多多投产比&#xff08;ROI&#xff09;的计算公式为&#xff1a;ROI 成交金额 / 花费 100%。也可以简单理解为&#xff1a;ROI 点击量 * 转化率 * 客单价 / (点击量 * 平均点击花费)。 拼多多推广可以使用3an推客。3an推客&#xff08;CPS模式&#xff09;给商家提供的营…

acronym 数据集

raise gl.ContextException(Could not create GL context) conda install -c conda-forge libstdcxx-ng ImportError: trimesh.viewer.windowed requires pip install "pyglet<2" pip install pyglet1.5.28github上的示例 3D 场景下的 RGBD Mask

Fortinet的安全愿景SASO概述

FTNT SASE的独特方法&#xff0c;使其成为一家适应性极强的厂商&#xff0c;能够应对不断变化的网络和网络安全环境。FTNT开发了一种名为Secure Access Service Omni&#xff08;SASO&#xff09;的变体&#xff0c;以更准确地反映FTNT在融合网络和安全功能方面的实力。我们预计…

老牌Git客户端 mac软件 SmartGit 汉化教程 及安装教程

SmartGit for Mac一款 Git 版本控制系统的图形化客户端程序&#xff0c;它能在您的工作上满足您的需求&#xff0c;smartgit是一个企业级的Git、Mercurial、以及Subversion图形化客户端软件&#xff0c;功能非常强大&#xff0c;它可以简单快速的实现Git及Mercurial中的版本控制…

SaaS、PaaS、IaaS、DaaS功能区别、优缺点以及关联简述

目前主流的IaaS、PaaS和SaaS产品 简述应用方案 这里借用汽车的例子对IaaS、PaaS、SaaS的解释进一步阐述三者的区别。 假设你需要出去外出使用交通工具&#xff0c;我们有四种的方案&#xff1a; On-premise&#xff08;本地部署服务&#xff09; 自己开车&#xff0c;需要维护…

容器化管理SpringBoot项目:在用jar包制作镜像的时候遇到的错误记录

在容器化管理SpringBoot项目&#xff0c;进行到“用jar包制作镜像”一步时&#xff0c;遇到的error真的是一环接着一环&#xff0c;这里就记录一下&#xff0c;一套流程下来遇到的error&#xff0c;以及一些我的解决方法&#xff1a; ERROR: "docker buildx build" r…

前端css中径向渐变(radial-gradient)的使用

前端css中径向渐变的使用 一、前言二、主要内容说明&#xff08;一&#xff09;、径向渐变的形状1.椭圆形渐变&#xff08;ellipse&#xff09;&#xff0c;源码12.源码1运行效果3.圆形渐变&#xff08;circle&#xff09;&#xff0c;源码24.源码2运行效果 &#xff08;二&…

【强训笔记】day14

NO.1 思路&#xff1a;用一个哈希表&#xff0c;先遍历s1&#xff0c;统计哈希表内的字符个数&#xff0c;在遍历s2&#xff0c;s2中的字符在哈希表中减去&#xff0c;如果哈希表中的字符个数小于0那么就输出No。 代码实现&#xff1a; #include <iostream> #include&…

使用网络工具监控网络性能

网络工具和实用程序有助于有效地检测网络问题&#xff0c;诊断其原因和位置&#xff0c;以及缓解和解决问题&#xff0c;这有助于确保网络环境的稳定性&#xff0c;使用户免受设备连接问题带来的麻烦。 网络工具已经成为每个网络管理员用于有效诊断和处理网络问题的解决方案中…

5 Spring 事务管理

目录 1.概述 2.事务特性&#xff1a;ACID 3.Spring 框架的事务管理支持两种方式 编程式事务 申明式事务 4.Spring 事务管理 API 事务管理器接口 Spring 的回滚方式 事务定义接口 事务的四种隔离级别 事务的七种传播行为 5.事务注解例子&#xff1a; Transactianal…

【Java orm 框架比较】十 新增hammer_sql_db 框架对比

迁移到&#xff08;https://gitee.com/wujiawei1207537021/spring-orm-integration-compare&#xff09; orm框架使用性能比较 比较mybatis-plus、lazy、sqltoy、mybatis-flex、easy-query、mybatis-mp、jpa、dbvisitor、beetlsql、dream_orm、wood、hammer_sql_db 操作数据 …

关于GitHub仓库建立及提交问题

文章目录 前言GitHub仓库创建token令牌的获取GitHub克隆到本地GitHub上传文件 前言 为了整一个GitHub仓库然后上传文件&#xff0c;笔者看了不下100篇博客&#xff0c;20段教程&#xff0c;最后在两位大佬的帮助下&#xff0c;才整明白了&#x1f62d; 先提前说一嘴从 2021年8月…