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.mzph.cn/news/601629.shtml

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

相关文章

Pandas DataFrame中将True/False映射到1/0

在本文中&#xff0c;我们将看到如何在Pandas DataFrame中将True/False映射到1/0。True/False到1/0的转换在执行计算时至关重要&#xff0c;并且可以轻松分析数据。 1. replace方法 在这个例子中&#xff0c;我们使用Pandas replace()方法将True/False映射到1/0。在这里&…

【Spark精讲】记一个SparkSQL引擎层面的优化:SortMergeJoinExec

SparkSQL的Join执行流程 如下图所示&#xff0c;在分析不同类型的Join具体执行之前&#xff0c;先介绍Join执行的基本框架&#xff0c;框架中的一些概念和定义是在不同的SQL场景中使用的。 在Spark SQL中Join的实现都基于一个基本的流程&#xff0c;根据角色的不同&#xff0…

信息论与编码期末复习——计算题+基础汇总(二)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;V…

【计算机毕业设计】SSM网上外卖订餐管理系统

项目介绍 该项目为前后台项目&#xff0c;分为普通用户与管理员两种角色&#xff0c;前台普通用户登录&#xff0c;后台管理员登录&#xff1b; 普通用户主要功能包括&#xff1a; 登录注册&#xff0c;查看商品&#xff0c;提交订单&#xff0c;然后留言&#xff0c;查看购物…

DS|静态查找

题目一&#xff1a;DS静态查找 -- 顺序查找 题目描述&#xff1a; 给出一个队列和要查找的数值&#xff0c;找出数值在队列中的位置&#xff0c;队列位置从1开始 要求使用带哨兵的顺序查找算法 输入要求&#xff1a; 第一行输入n&#xff0c;表示队列有n个数据 第二行输入…

CAN通信的基本原理与实现方法

一. CAN协议概念 1.1 CAN 协议简介 CAN 是控制器局域网络 (Controller Area Network) 的简称&#xff0c;它是由研发和生产汽车电子产品著称的德国 BOSCH 公司开发的&#xff0c;并最终成为国际标准(ISO11519以及ISO11898),是国际上应用最广泛的现场总线之一。差异点如下&…

手拉手springboot3整合mybatis-plus多数据源

环境介绍 技术栈 springbootmybatis-plusmysql 软件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 17 Spring Boot 3.1.7 dynamic-datasource 3.6.1 mybatis-plus 3.5.3.2 加入依赖 <dependency><groupId>com.baomidou</groupId><arti…

苹果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、提高安全性为主。根据苹果官方更…

如何做一个炫酷的Github个人简介(3DContribution)

文章目录 前言3D-Contrib第一步第二步第三步第四步第五步第六步 前言 最近放假了&#xff0c;毕设目前也不太想做&#xff0c;先搞一点小玩意玩玩&#xff0c;让自己的github看起来好看点。也顺便学学这个action是怎么个事。 3D-Contrib 先给大家看一下效果 我的个人主页&am…

面试算法96:字符串交织

题目 输入3个字符串s1、s2和s3&#xff0c;请判断字符串s3能不能由字符串s1和s2交织而成&#xff0c;即字符串s3的所有字符都是字符串s1或s2中的字符&#xff0c;字符串s1和s2中的字符都将出现在字符串s3中且相对位置不变。例如&#xff0c;字符串"aadbbcbcac"可以由…

trino-435:dynamic catalog数据库存储代码实现

一、dynamic catalog数据库存储源码分析 dynamic catalog的实现主要涉及到两个类&#xff1a;CoordinatorDynamicCatalogManager、WorkerDynamicCatalogManager&#xff0c;这两个类的详细信息如下&#xff1a; 这两个类主要提供了对catalog的增删改查的方法。trino-435源码中…

​三子棋(c语言)

前言&#xff1a; 三子棋是一种民间传统游戏&#xff0c;又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏规则是双方对战&#xff0c;双方依次在9宫格棋盘上摆放棋子&#xff0c;率先将自己的三个棋子走成一条线就视为胜利。但因棋盘太小&#xff0c;三子棋在很多时候会出现和…

推荐一款Apache开源的文档内容解析工具

shigen坚持更新文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 hello&#xff0c;伙伴们&#xff0c;在闲暇的时候逛了一下掘金&#xff0c;发现了这样的一篇文章&#xf…

机器人相关知识

机器人学&#xff08;Robotics) 一些基础概念 位姿 位姿位置姿态 位姿的表示 刚体 刚性物体是一组粒子的集合&#xff0c;其中任意两个粒子之间的距离保持固定&#xff0c;不受物体运动或施加在物体上的力的影响。 “完全不可变形”的物体就是刚体。 刚体位置 刚性连杆 …

【网络技术】【Kali Linux】Wireshark嗅探(八)动态主机配置协议(DHCP)

一、实验目的 本次实验使用 Wireshark &#xff08;“网鲨”&#xff09;流量分析工具进行网络流量嗅探&#xff0c;旨在初步了解动态主机配置协议&#xff08;DHCP协议&#xff09;的工作原理。 二、DHCP协议概述 动态主机配置协议&#xff08; D ynamic H ost C onfigurat…

工智能基础知识总结--导出SVM要优化的问题

导出SVM要优化的问题 对于上图中这样一个二分类线性可分问题,期望找到一个分类超平面将正负类分开,SVM就是一个用来寻找这样的分类超平面的算法。 定义正负类的标签分别为1、-1,分类超平面的表达式为 f ( x ) = w T x + b f(x)=w^Tx+b

使用代理IP保护爬虫访问隐私数据的方法探讨

目录 前言 1. 获取代理IP列表 2. 随机选择代理IP 3. 使用代理IP发送请求 4. 处理代理IP异常 总结 前言 保护爬虫访问隐私数据是一个重要的安全问题。为了保障用户的隐私&#xff0c;很多网站会采取限制措施&#xff0c;如封禁IP或限制访问频率。为了绕过这些限制&#x…

宏电股份5G RedCap终端产品助力深圳极速先锋城市建设

12月26日&#xff0c;“全城全网&#xff0c;先锋物联”深圳移动5G-A RedCap助力深圳极速先锋城市创新发布会举行&#xff0c;宏电股份携一系列5G RedCap终端产品应邀参与创新发布会&#xff0c;来自全国5G生态圈的各界嘉宾、专家学者济济一堂&#xff0c;共探信息化数字化创新…

L1-078:吉老师的回归

题目描述 曾经在天梯赛大杀四方的吉老师决定回归天梯赛赛场啦&#xff01; 为了简化题目&#xff0c;我们不妨假设天梯赛的每道题目可以用一个不超过 500 的、只包括可打印符号的字符串描述出来&#xff0c;如&#xff1a;Problem A: Print "Hello world!"。 众所周知…

实验笔记之——服务器链接

最近需要做NeRF相关的开发,需要用到GPU,本博文记录本人配置服务器远程链接的过程,本博文仅供本人学习记录用~ 连上服务器 首先先确保环境是HKU的网络环境(HKU AnyConnect也可)。伙伴已经帮忙创建好用户(第一次登录会提示重新设置密码)。用cmd ssh链接ssh -p 60001 <u…