C++ -string -常见用法4

博客主页:【夜泉_ly】
本文专栏:【C++】
欢迎点赞👍收藏⭐关注❤️

在这里插入图片描述

文章目录

  • 💡前言
  • 💡字符串操作
    • 1.c_str 、data -重点⭐
      • 1.1函数原型
      • 1.2用法
    • 2.copy
      • 2.1函数原型
      • 2.2用法
      • 2.3注意事项
    • 3.find、rfind -重点⭐
      • 3.1函数原型
      • 3.2用法
      • 3.3注意事项
    • 4.find_..._of
      • 4.1功能简述
    • 5.substr
      • 5.1函数原型
      • 5.2用法
    • 6.compare
      • 6.1简介
      • 6.2返回值

💡前言

在这篇文章中,我将继续简单探讨 C++string 的基本用法。写这篇文章的主要目的是帮助我巩固所学的知识,同时也便于未来的复习和参考。

如果你想大致的了解 string 的基本用法,也可以留下来看看。

对于那些希望深入学习更多细节的读者,可以去看看这个网站:cplusplus.com,以获取更全面的参考资料。

💡字符串操作

1.c_str 、data -重点⭐

string::datastring::c_str是同义词,返回值完全相同。
一般用c_str

1.1函数原型

const char* c_str() const;

1.2用法

  • 返回C类型的字符串,可以和C语言的一些接口函数配合:
string filename = "test.cpp";
FILE* fout = fopen(filename.c_str(), "r");
  • 这里和string::operator<<做一下对比,可以看出两者的区别:
void Test()
{string str("Hello");str += '\0';str += " World";cout << str << endl;cout << str.c_str() << endl;
}

Output:

Hello World
Hello

2.copy

2.1函数原型

size_t copy (char* s, size_t len, size_t pos = 0) const;

2.2用法

string类对象的内容拷贝到字符串。

string str("Hello World");
char* c = new char[str.size()+1];
str.copy(c, str.size());
c[str.size()] = '\0'; // 这里只能手动加\0
cout << c << endl;

Output:

Hello World

2.3注意事项

  1. 拷贝时不会在拷贝内容之后加’\0’
string str("666");
char c[10];
str.copy(c , str.size());
cout << c;

运行结果如下图:
在这里插入图片描述

  1. 字符数组不够长,行为未定义。
  2. pos 大于 size,抛异常。

3.find、rfind -重点⭐

3.1函数原型

size_t find (const string& str, size_t pos = 0) const;
size_t find (const char* s, size_t pos = 0) const;
size_t find (const char* s, size_t pos, size_t n) const;
size_t find (char c, size_t pos = 0) const;
size_t rfind (const string& str, size_t pos = npos) const;
size_t rfind (const char* s, size_t pos = npos) const;
size_t rfind (const char* s, size_t pos, size_t n) const;
size_t rfind (char c, size_t pos = npos) const;

3.2用法

在字符串中查找指定内容。
其中 find是正向查找,rfind 是反向查找。
find :

void Test()
{string str("Hello World!!!");size_t found = str.find(string("!!"));// 从头找,找 “!!” , 找到了返回对应下标cout << found << endl;found = str.find("!!", found + 2);// 在上次查找的下一个位置查找“!!”, 找不到返回string::npos, 即-1(整型最大值)cout << found << endl;found = str.find("!!!!!", 0, 3);// 从头开始找,找“!!!!!”的前3个,即“!!!”, 找到了返回对应下标cout << found << endl;found = str.find('!');// 从头开始找, 找字符‘!’, 找到了返回对应下标cout << found << endl;
}

Output :

11
4294967295
11
11

反向查找rfind的用法与find基本相似,不过需注意反向查找的pos缺省值是npos,即默认从尾部开始查找。

3.3注意事项

pos过大 或者 n过大,行为未定义。
vs上是直接返回string::npos

void Test()
{string str("666666");size_t found = str.find("666", -1);cout << found << endl;found = str.find("666", 0, -1);cout << found << endl;
}

Output:

4294967295
4294967295

4.find_…_of

这里共有四个函数:
find_first_of
find_last_of
find_first_not_of
find_last_not_of
其函数原型与findrfind类似,可以类比使用。

4.1功能简述

函数功能
find_first_of返回字符串中第一个属于指定字符集合的下标。
find_last_of返回字符串中最后一个属于指定字符集合的下标。
find_first_not_of返回字符串中第一个不属于指定字符集合的下标。
find_last_not_of返回字符串中最后一个不属于指定字符集合的下标。

在这里插入图片描述

5.substr

5.1函数原型

string substr (size_t pos = 0, size_t len = npos) const;

5.2用法

pos位置开始,搞出一个长度为len的字串。
截取 [pos,len) 位置的。

void Test()
{string str("Hello World");string str1 = str.substr();string str2 = str.substr(str.find('W'));string str3 = str.substr(0, str.find('W'));cout << "str1: " << str1 << endl;cout << "str2: " << str2 << endl;cout << "str3: " << str3 << endl;
}

Output:

str1: Hello World
str2: World
str3: Hello

6.compare

6.1简介

提供了多种方式进行字符串的比较:
在这里插入图片描述
这里面用的最多的感觉是第一个:

void Test()
{string str("Hello World");string str1 = str.substr();string str2 = str.substr(str.find('W'));string str3 = str.substr(0, str.find('W'));cout << str.compare(str1) << endl;cout << str.compare(str2) << endl;cout << str.compare(str3) << endl;
}

Output :

0
-1
1

6.2返回值

返回值意义
0相等
<0比较字符串中的第一个不匹配字符的值较小,或者所有比较的字符匹配但比较字符串较短。
>0比较字符串中的第一个不匹配字符的值较大,或者所有比较的字符匹配但比较字符串较长。


在这里插入图片描述


希望本篇文章对你有所帮助!并激发你进一步探索编程的兴趣!
本人仅是个C语言初学者,如果你有任何疑问或建议,欢迎随时留言讨论!让我们一起学习,共同进步!

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

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

相关文章

华山论剑之Rust的Trait

华山论剑&#xff0c;群雄荟萃&#xff0c;各显神通。武林中人&#xff0c;各有所长&#xff0c;或剑法飘逸&#xff0c;或掌法刚猛&#xff0c;或轻功绝顶。这就好比Rust中的trait&#xff0c;它定义了一种武功套路&#xff0c;而不同的门派、不同的人&#xff0c;可以将这套武…

分布式篇(分布式事务)(持续更新迭代)

一、事务 1. 什么是事务 2. 事务目的 3. 事务的流程 4. 事务四大特性 原子性&#xff08;Atomicity&#xff09; 一致性&#xff08;Consistency&#xff09; 持久性&#xff08;Durability&#xff09; 隔离性&#xff08;Isolation&#xff09; 5. MySQL VS Oracle …

016_基于python+django网络爬虫及数据分析可视化系统2024_kyz52ks2

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍&#xff1a;CodeMentor毕业设计领航者、全网关注者30W群落&#xff0c;InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者&#xff0c;博客领航之星、开发者头条/腾讯云/AW…

IE11删除hao360主页

欲删 hao.360.com&#xff0c;hao360.mainshe.com 主页&#xff0c;必先删除注册表键&#xff1a; HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\EUPP HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main "Start Page" "Default_Pag…

87. 多边形轮廓Shape(圆弧)

先掌握上节课关于Shape内容&#xff0c;再继续学习本节课关于Shape圆弧的介绍。 圆弧方法.arc() 圆弧方法.arc()使用方式和原来学习过的圆弧曲线ArcCurve整体相似&#xff0c;区别在于圆心定位方式有差异。 圆弧.arc()参数的圆心坐标是相对当前.currentPoint而言,而不是坐标原…

斜视角,视角和入射角

注意分辨率中的2 在&#xff1b;雷达的径向&#xff0c;分辨率(时间)就是脉冲宽度/2

SAP 控制生产订单发料数量不能超过生产订单预留数量

SAP 控制生产订单发料数量不能超过生产订单预留数量 业务场景前台操作1、创建生产订单---CO012、生产订单发料---MIGO3、系统后台配置业务场景 正常生产订单进行投料的根据生产订单组件进行投料,比如生产订单组件数量是100PCS,那在做工单发料的时候MIGO带出的默认发料数量就…

机器学习(MachineLearning)(8)——模型评估与优化

机器学习&#xff08;MachineLearning&#xff09;&#xff08;1&#xff09;——机器学习概述 机器学习&#xff08;MachineLearning&#xff09;&#xff08;2&#xff09;——线性回归 机器学习&#xff08;MachineLearning&#xff09;&#xff08;3&#xff09;——决策树…

Linux_进程控制

一&#xff1a;进程创建 fork()函数创建新进程 #include <unistd.h> pid_t fork(void); 返回值&#xff1a;自进程中返回0&#xff0c;父进程返回子进程id&#xff0c;出错返回-1 进程调用fork&#xff0c;当控制转移到内核中的fork代码后&#xff0c;内核做&#xff1a;…

Spring Boot Web框架:智慧社区设计新思路

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

cocos Creator + fairyGUI 快速入门

版本 Creator 3.8.x&#xff0c;FairyGUI 2022 大部分内容来自 https://en.fairygui.com/docs/sdk/creator 1.新建cocos项目&#xff0c;根目录运行 npm install --save fairygui-cc 引入 fairyGUI库 2.assets目录之外新建fairyGUI项目 3.fairyGUI中编辑UI 完成后发布到Creato…

uniapp,获取头部高度

头部自定义时候&#xff0c;设置获取安全区域&#xff0c;可以用 uni.getSystemInfoSync();接口。 <view class"statusBar" :style"{height:statusBarHeightpx}"> let SYSuni.getSystemInfoSync(); let statusBarHeightref(SYS.statusBarHeight) …

Python基础——类与对象

类与对象的理解&#xff1a; 在程序中我们将类看作是设计图纸&#xff0c;对象则是根据这个图纸生产的产品。面向对象编程就是使用对象编程&#xff0c;在类中我们定义成员属性和方法。 来看下面这个例子&#xff0c;创建student类&#xff0c;定义对象并对属性赋值。 class S…

解决linux服务器磁盘占满问题(详细,有效,100%解决)

应用场景&#xff1a; 在我们的日常开发中&#xff0c;我们的服务器总是在不知不觉中磁盘莫名奇妙少了很多空间&#xff0c;或者被占满了&#xff0c;如果这时候要想要存储什么文件&#xff0c;突然发现空间不够了。但我们通常也不知道那些文件占用的空间大&#xff0c;这时候…

Vue是一套构建用户界面的渐进式框架,常用于构建单页面应用

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把手教你开发炫酷的vbs脚本制作(完善中……&#xff09; 4、牛逼哄哄的 IDEA编程利器技巧(编写中……&#xff09; 5、面经吐血整理的 面试技…

红黑树的理解与实现(详解)

相关的数据结构&#xff1a; 搜索二叉树-CSDN博客 AVL树的创建与检测-CSDN博客 个人主页&#xff1a;敲上瘾-CSDN博客 个人专栏&#xff1a;游戏、数据结构、c语言基础、c学习、算法 目录 一、红黑树规则&#xff1a; 二、红黑树的插入 1.变色 2.单旋变色 3.双旋变色 三、…

WebGoat SQL Injection (intro) 源码分析

首先了解 java 中 mysql 的连接&#xff1a;java连接Mysql WebGoat SQL Injection (intro) 10 根据提示&#xff1a;下面两个输入框只有一个受到 sql 注入攻击。题目要求是检索到所有数据 发现请求路径为 SqlInjection/assignment5b 定位到所在文件如下&#xff0c;根据代码…

【uniapp】使用Promise封装request

目录 1、创建config目录 2、创建settings.js 3、创建目录utils 4、创建request.js 5、创建api目录 6、创建apis.js文件 7、业务系统调用 7.1 业务系统banner 7.2 业务系统荣誉页面&#xff08;传参&#xff09; 前言&#xff1a;使用Promise封装request 1、创建config…

UNIX网络编程-传输层

概述 传输层主要包括&#xff1a;TCP、UDP、SCTP&#xff08;流控制传输协议&#xff09;&#xff01; 绝大多数客户端/服务器网络应用都使用TCP/UDP。SCTP是一个较新的协议&#xff0c;最初设计用于跨因特网传输电话信令。 这些传输协议都转而使用网络协议IP&#xff1a;或是…

2023年华为杯数学建模竞赛题F论文和代码

强对流降水临近预报建模与优化 对问题一&#xff0c;为了实现基于前一小时&#xff08;10帧&#xff09;的实测雷达观测量&#xff08;ZH、ZDR、KDP&#xff09;&#xff0c;对后续一小时&#xff08;10帧&#xff09;的ZH进行预报&#xff0c;本文首先建立了线性拟合与RMSE双驱…