C++中string的库函数

山再高,往上攀,总能登顶!

路再长,走下去,定能到达!


🎥烟雨长虹,孤鹜齐飞的个人主页

🔥个人专栏c++

期待小伙伴们的支持与关注!!!


目录

前言:

string的简介

​编辑

string的组成

string的功能

 string的基本用法

 string的声明与初始化

 声明一个空字符串:

   字符串的初始化:

运行效果:

 string的库函数

主要的功能:

<1>length函数:

函数声明#

函数使用#

<2>find函数:

函数声明#

函数使用#

<3>append函数:

函数声明#

函数使用#

<4>replace函数:

函数原型#

函数声明#

函数使用#

<5>substr函数:

函数原型#

函数声明#

函数使用#

<6>compare函数:

函数声明#

函数使用#

扩展#

遍历string的方法 

 string的插入和删除

insert函数:

函数原型#

函数使用#

push_back函数:

函数使用#

erase函数:

函数原型#

函数使用#

总结:


前言:

为什么学习 string
(1)C 语言中,字符串是以 '  \0 '  结尾的一些字符的集合,为了操作方便, C 标准库中提供了一些 str 系列的库函数, 但是这些库函数与字符串是分离开的,不太符合OOP 的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。
(2) OJ 中,有关字符串的题目基本以 string 的形式出现,而且在常规工作中,为了简单、方便、快捷,基本都使用string ,很少有人去使用 C 库中的字符串操作函数。

string的简介


string的组成

<1>string是C++标准库的重要组成部分,主要用于字符串处理

<2>使用string库需要在头文件中包括该库 #include<string>

<3>string与char[ ]不同,string实现了高度的封装,可以很方便地完成各种字符串的操作,比如拼接、截取、匹配等等


string的功能

<4>字符串管理:string封装了字符串的存储和管理。它当动处理字符串的内存分配和释放,避免了手动管理内存的麻烦
<5>动态大小调整:string可以根据需要自动调整字符串的大小。在添加或删除字符时,
string会自动调整内部的存储容量,确保足够的空间来容纳字符串
<6>安全性:string提供了一些方法来确保字符串的安全性。例如,它提供了越界访问检查,以避免访问超出字符串范围的字符
<7>迭代器支持:string支持迭代器,可以使用送代器遍历字符串中的字符,进行字符级别的操作

<8>兼容性:string是C++标准库的一部分,因此在C++中广泛使用,并且与其他标准库组件和C++语言特性兼容

 string的基本用法

 string的声明与初始化

#include<iostream>
#include<string>
using namespace std;
int main()
{//声明一个空字符串string str1;//使用字符串的字面量初始化字符串string str2 = "Hello C++";//使用另一个string的对象初始化字符串string str3 = str2;//使用部分字符串初始化字符串string str4 = str2.substr(0, 5);//使用字符数组初始化字符串const char* arr = "Hello C++";string str5(arr);//使用重复的字符初始化字符串string str6(5, 'A');//使用assign的方式初始化string str7;str7.assign("Hello C++", 5);cout << str1 << endl;cout << str2 << endl;cout << str3 << endl;cout << str4 << endl;cout << str5 << endl;cout << str6 << endl;cout << str7 << endl;return 0;
}

 声明一个空字符串:

 string str1;


   字符串的初始化:

   <1>使用字符串的字面量初始化字符串
    string str2 = "Hello C++";
    <2>使用另一个string的对象初始化字符串
    string str3 = str2;
    <3>使用部分字符串初始化字符串
    string str4 = str2.substr(0, 5);
    <4>使用字符数组初始化字符串
    const char* arr = "Hello C++";
    string str5(arr);
    <5>使用重复的字符初始化字符串

    string str6(5, 'A');

    <6>使用assign的方式初始化字符串
    string str7;
    str7.assign("Hello C++", 5);


运行效果:

 string的库函数

主要的功能:

<1>获取字符串的长度length

<2>字符串的查找find

<3>字符串的追加append

<4>字符串的替换replace

<5>提取子字符串substr

<6>字符串的比较compare


<1>length函数:

作用:获取字符串的长度

C++ string中函数 length() 等同于 size()都是返回 string 长度(单位字节)

函数声明#

size_t length()

因为 length 返回的是无符号的整型所以我们用size_t来接收

用 int 来接收也没有关系

函数使用#

#include<iostream>
#include<string>
using namespace std;
int main()
{string str = "I love you";size_t rs = str.length();cout << rs;return 0;
}


<2>find函数:

作用:查找源字符串 arr1 中是否包含子串 arr2

find函数的返回值是整数,假如字符串存在包含关系,其返回值必定不等于npos,但如果字符串不存在包含关系,那么返回值一定npos

函数声明#

str.find();

函数使用#

#include<iostream>
#include<string>
using namespace std;
int main()
{string str = "you love me";int rs = str.find("me");if (rs != str.npos)//如果没找到,返回一个特别的标志c++中用npos表示{cout << "找到了!!!";}else{cout << "找不到!!!";}return 0;
}


<3>append函数:

作用:将(字符串/字符) str2 拼接到(字符串/字符) str1 后面

函数声明#

str.append();

函数使用#

#include<iostream>
#include<string>
using namespace std;
int main()
{string str1 = "Hello";string str2 = "C++";string rs = str1.append(",").append(str2);cout << rs << endl;return 0;
}

如果要添加其他字符或者字符串我们可以用 ' . ' 运算符将它们连接起来


<4>replace函数:

函数原型#

string replace (size_t pos, size_t len, const string& str);

pos表示要替换的子串在原字符串中的起始位置

len表示要替换的子串的长度

str表示用来替换的字符串

作用:用str替换指定字符串从起始位置pos开始长度为len的字符

函数声明#

str.replace();

函数使用#

(1)

#include<iostream>
#include<string>
using namespace std;
int main()
{string str1 = "Hello";str1.replace(0, 5, "World");cout << str1 << endl;return 0;
}

(2)用迭代器 起始位置结束位置 的将str字符串的内容全部替换

#include<iostream>
#include<string>
using namespace std;
int main()
{string str = "Hello";str = str.replace(str.begin(), str.end(), "#####");cout << str << endl;return 0;
}


<5>substr函数:

函数原型#

string substr (size_t pos, size_t len) 

pos表示要截取的子字符串的起始位置

len表示要截取的子字符串的长度

作用:截取字符串

函数声明#

str.substr();

函数使用#

#include<iostream>
#include<string>
using namespace std;
int main()
{string str = "Hello C++";string arr = str.substr(6, 3);cout << arr << endl;return 0;
}


<6>compare函数:

作用:用于比较两个字符串是否相等

当字符串str1字符串str2相等时,返回 0
当字符串str1小于字符串str2时,返回-1
当字符串str1大于字符串str2时,返回 1

函数声明#

arr1.compare();

函数使用#

#include<iostream>
#include<string>
using namespace std;
int main()
{string arr1 = "Hello";string arr2 = "World";string str1 = "aaa";string str2 = "aaa";int rs1 = arr1.compare(arr2);int rs2 = str1.compare(str2);if (rs1 == 0){cout << "相等" << endl;}else if (rs1 < 0){cout << "arr1小于arr2" << endl;}else {cout << "arr1大于arr2" << endl;}if (rs2 == 0){cout << "相等" << endl;}else if (rs2 < 0){cout << "str1小于str2" << endl;}else {cout << "str1大于str2" << endl;}return 0;
}

扩展#

(1)string重载了不等号,所以可以直接使用s1< s2的方式来比较string的大小,比较的规则是按照字典序大小进行比较。
(2)字典序的比较方法是从小到大一个一个比较,一旦遇到不相等的字符就确定大小关系。

#include<iostream>
#include<string>
using namespace std;
int main()
{string arr1 = "Hello";string arr2 = "World";if (arr1>arr2){cout << "arr1大于arr2" << endl;}else if(arr1<arr2){cout << "arr1小于arr2" << endl;}else{cout << "相等" << endl;}return 0;
}

遍历string的方法 

常用的遍历string的方法有三种

<1>循环枚举下标
<2>auto枚举(其中&表示取引用类型,如果对i修改将会改变原来的值)

<3>迭代器


#include<iostream>
#include<string>
using namespace std;
int main()
{string arr = "abcdef";for (int i = 0;i<arr.length();i++)//循环枚举下标cout << arr[i] << " " ;cout << "\n";for (auto i : arr)//auto枚举{cout << i << " ";}cout << "\n";string::iterator rs = arr.begin();//迭代器while (rs != arr.end()){cout << *rs++ << " ";}cout << "\n";return 0;
}

 string的插入和删除

push_back: (重点) 尾插
insert:(重点) 头插
erase: 删除指定位置的数据


insert函数:

函数原型#

basic_string& insert (size_type pos, const basic_string& str);

作用:在原串下标为pos的字符前插入字符串str

函数使用#

#include<iostream>
#include<string>
using namespace std;
int main()
{string str = "World";str.insert(0, "Hello ");cout << str << endl;return 0;
}


push_back函数:

作用:将一个字符添加到字符串,位置为当前最后一个元素的下一个元素

函数使用#

#include<iostream>
#include<string>
using namespace std;
int main()
{string str = "Hello";for (int i = 0; i < 6; i++){string arr = " World";str.push_back(arr[i]);}cout << str << endl;return 0;
}


erase函数:

函数原型#

string& erase ( size_t pos, size_t n );

作用:删除字符串从pos位置开始的n个字符

函数使用#

#include<iostream>
#include<string>
using namespace std;
int main()
{string str = "Hello World";str.erase(6, 5);cout << str << endl;return 0;
}

上面已经对string进行了简单的介绍,大家只要能够正常使用即可

总结:


string的功能强大,不仅拥有很多库函数,还可以使用迭代器和auto提高了编程速度。我们在刷一些算法题的时候string往往是最优解,所以大家就冲冲冲拿下string!!!

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 面向对象之多态和鸭子类型

Python 面向对象之多态和鸭子类型 【一】多态 【1】概念 多态是面向对象的三大特征之一多态&#xff1a;允许不同的对象对同一操作做出不同的反应多态可以提高代码的灵活性&#xff0c;可扩展性&#xff0c;简化代码逻辑 【2】代码解释 在植物大战僵尸中&#xff0c;有寒冰…

扩展 apiserver 连接认证 ip, apiserver证书更新

本文来自我的博客地址 文章目录 问题场景:问题分析:问题解决:查看 apiserver 证书支持的 ip 或 host使用 openssl 生成证书:再次查看 apiserver 证书支持的 ip 或 host 再次尝试将 master 加点加入参考 问题场景: k8s 1.28.1 集群后期新增 vip apiserver 证书不支持 vip 引入…

在电商狂欢中,什么平台更加对商家有利?

我是电商珠珠 近年来&#xff0c;不管是直播电商也好&#xff0c;电商平台也好&#xff0c;都一直朝着向上走的趋势。 我做电商也已经有5年时间了&#xff0c;期间做过天猫&#xff0c;快手、抖店&#xff0c;团队从原来的几个人&#xff0c;扩大到了70。 在22年10月&#x…

HTML5+CSS3+JS小实例:过年3D烟花秀

实例:过年3D烟花秀 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><…

This is probably not a problem with npm.

项目场景&#xff1a; 新创建的vue3项目&#xff0c;根据elementplus官网安装步骤进行按需导入安装&#xff0c;运行项目报错 This is probably not a problem with npm.There is likely additional logging output above. 原因分析&#xff1a; 是elementplus安装版本和自动…

Spring Boot依赖版本声明

链接 官网 Spring Boot文档官网&#xff1a;​​​​​​https://docs.spring.io/spring-boot/docs/https://docs.spring.io/spring-boot/docs/ Spring Boot 2.0.7.RELEASE Spring Boot 2.0.7.RELEASE reference相关&#xff1a;https://docs.spring.io/spring-boot/docs/2.…

哨兵1号回波数据(L0级)FDBAQ压缩算法详解

本专栏目录: 全球SAR卫星大盘点与回波数据处理专栏目录-CSDN博客 1. 全球SAR卫星回波数据压缩算法统计 各国的SAR卫星的压缩算法按照时间轴排列如下: 可以看出传统的分块BAQ压缩算法(上图粉色)仍然是主流,哨兵1号其实也有传统的BAQ压缩模式。 本文介绍哨兵1号用的FDBAQ算…

MySQL-DCL

DCL是数据控制语言&#xff0c;用来管理数据库用户&#xff0c;控制数据库的访问权限。 管理用户&#xff1a;管理哪些用户可以访问哪些数据库 1.查询用户 USE mysql; SELECT * FROM user; 注意&#xff1a; MySQL中用户信息和用户的权限信息都是记录在mysql数据库的user表中的…

苹果macOS 14.3开发者预览版Beta 2发布 修复API会意外失败的问题

1 月 4 日消息&#xff0c;苹果向 Mac 电脑用户推送了 macOS 14.3 开发者预览版 Beta 2 更新&#xff08;内部版本号&#xff1a;23D5043d&#xff09;&#xff0c;本次更新距离上次发布隔了 22 天。 macOS Sonoma 14.3 Beta 2 主要以修复 BUG、提高安全性为主。根据苹果官方更…

开源项目 | 完整部署流程、一款开源人人可用的开源数据可视化分析工具

&#x1f4da; 项目介绍 在互联网数据大爆炸的这几年&#xff0c;各类数据处理、数据可视化的需求使得 GitHub 上诞生了一大批高质量的 BI 工具。 借助这些 BI 工具&#xff0c;我们能够大幅提升数据分析效率、生成更高质量的项目报告&#xff0c;让用户通过直观的数据看到结…

认识机器学习【woodwhales.cn】

为了更好的阅读体验&#xff0c;建议移步至笔者的博客阅读&#xff1a;认识机器学习 生活中的问题1&#xff1a;居民家庭生活用气价格 北京燃气小程序在线咨询&#xff0c;查询北京居民家庭生活用气价格 上图价格梯度&#xff0c;可以由文字转换成表格&#xff1a; 第一档用气…

如何区分接口测试和功能测试

接口测试和功能测试的区别&#xff1a; 本文主要分为两个部分&#xff1a; 第一部分&#xff1a;主要从问题出发&#xff0c;引入接口测试的相关内容并与前端测试进行简单对比&#xff0c;总结两者之前的区别与联系。但该部分只交代了怎么做和如何做&#xff1f;并没有解释为…

Stable Diffusion模型概述

Stable Diffusion 1. Stable Diffusion能做什么&#xff1f;2. 扩散模型2.1 正向扩散2.2 反向扩散 3. 训练如何进行3.1 反向扩散3.2 Stable Diffusion模型3.3 潜在扩散模型3.4 变分自动编码器3.5 图像分辨率3.6 图像放大 4. 为什么潜在空间是可能的&#xff1f;4.1 在潜在空间中…

【本科生通信原理】【实验报告】【北京航空航天大学】实验一:通信原理初步

一、实验目的&#xff1a; 熟悉 MATLAB开发环境、掌握 MATLAB基本运算操作&#xff1b;熟悉和了解 MATLAB图形绘制基本指令&#xff1b;熟悉使用 MATLAB分析信号频谱的过程&#xff1b;掌握加性白高斯噪声信道模型 二、实验内容&#xff1a; 三、实验程序&#xff1a; 1、 f…

原生微信小程序如何动态修改svg图片颜色及尺寸、宽高(封装svgIcon组件)解决ios不显示问题

最终效果 前言 动态设置Svg图片颜色就是修改Svg源码的path中的fill属性&#xff0c; 通过wx.getFileSystemManager().readFile读取.xlsx文件 ios不显示需要把encoding设置 binary 把文件转成base64 封装svg-icon组件 1、在项目的components下新建svg-icon文件夹&#xff0c;新…

iec104和iec61850

iec104和iec61850 IEC104 规约详细解读(一) 协议结构 IEC104 规约详细解读(二)交互流程以及协议解析 61850开发知识总结与分享【1】 Get the necesarry projects next to each other in the same directory; $ git clone https://github.com/robidev/iec61850_open_server.g…

基于单片机的农田灌溉系统(论文+源码)

1.系统设计 本系统主要实现如下目标&#xff1a; 1&#xff0e;可以实时监测土壤湿度&#xff1b; 2&#xff0e;土壤湿度太低时&#xff0c;进行浇水操作&#xff1b; 3&#xff0e;可以按键设置湿度的触发阈值&#xff1b; 4. 可以实现远程操控 5&#xff0e;可以实现手…

wsl(ubuntu)创建用户

我们打卡ubuntu窗口&#xff0c;如果没有创建用户&#xff0c;那么默认是root用户 用户的增删改查 查 查询所有的用户列表 cat /etc/passwd | cut -d: -f1cat /etc/passwd: 这个命令用于显示 /etc/passwd 文件的内容。/etc/passwd 文件包含了系统上所有用户的基本信息。每一…

低代码开发会取代传统开发吗? 两者有什么区别 该如何选择

低代码开发技术在近几年逐渐被普及&#xff0c;帮助很大一部分开发者完成了复杂的工作。由于低代码开发方案入门门槛低且上手难度小&#xff0c;所以即使是非专业人士也可借助其便利性自主开发软件系统&#xff0c;整个开发过程几乎不需要专业程序员。久而久之就出现了一种声音…

C++上位软件通过Snap7开源库访问西门子S7-1200/S7-1500数据块的方法

前言 本人一直从事C上位软件开发工作较多&#xff0c;在之前的项目中通过C访问西门子PLC S7-200/S7-1200/S7-1500并进行数据交互的应用中一直使用的是ModbusTCP/ModbusRTU协议进行。Modbus上位开源库采用的LibModbus。经过实际应用发现Modbus开源库单次发送和接受的数据不能超过…