【string一些函数用法的补充】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

前言

string类对象的修改操作

我们来看 c_str 返回c格式的字符串的操作:

我们来看 rfind 和 substr 的操作:

string类非成员函数

我们来看 relational operators 的比较大小操作:

我们再来看 operator+ 的操作:

总结


前言

世上有两种耀眼的光芒,一种是正在升起的太阳,一种是正在努力学习编程的你!一个爱学编程的人。各位看官,我衷心的希望这篇博客能对你们有所帮助,同时也希望各位看官能对我的文章给与点评,希望我们能够携手共同促进进步,在编程的道路上越走越远!


提示:以下是本篇文章正文内容,下面案例可供参考

string类对象的修改操作

函数名称功能说明
push_back在字符串后尾插字符c
append在字符串后追加一个字符串
operator+=(重点)在字符串后追加字符串str
c_str(重点)返回C格式字符串
find + npos(重点)从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置
rfind从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置
substr在str中从pos位置开始,截取n个字符,然后将其返回

string中插入和查找等使用代码演示

注意:

  1. 在string尾部追加字符时,s.push_back(c) / s.append(1, c) / s += 'c'三种的实现方式差不多,一般 情况下string类的+=操作用的比较多,+=操作不仅可以连接单个字符,还可以连接字符串。
  2. 对string操作时,如果能够大概预估到放多少字符,可以先通过reserve把空间预留好。

我们来看 c_str 返回c格式的字符串的操作:

第一个参数:要的是c的字符串。

c++兼容c语言,c++是从c语言中生长出来的,c++中的某些标准库是沿用了c语言的,所以有时候得使用 c 得用法。比如:

void test_string9()
{string s1("hello world");string filename("test.cpp");//filename:是string的对象,是c++的FILE* fout = fopen(filename.c_str(), "r");//fopen:第一个参数要c的字符串地址,所以有了 //c_str() 来让c++兼容c
}int main()
{test_string9();return 0;
}

我们来看 rfind 和 substr 的操作:

//[0, 9]
//[0, 10) 左闭右开,右 - 左 = 个数
void test_string10()
{//string s1("file.cpp");string s1("file.c.tar.zip");// 拿到文件的后缀size_t pos1 = s1.rfind('.');//rfind:从后往前找if (pos1 != string::npos){string suffix = s1.substr(pos1);//size:是有效字符串的长度;对于下标而言,是'\0'的位置//string suffix = s1.substr(pos1, s1.size()-pos1);cout << suffix << endl;}else{cout << "没有后缀" << endl;}string url2("https://legacy.cplusplus.com/reference/string/string/substr/");string url1("http://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=65081411_1_oem_dg&wd=%E5%90%8E%E7%BC%80%20%E8%8B%B1%E6%96%87&fenlei=256&rsv_pq=0xc17a6c03003ede72&rsv_t=7f6eqaxivkivsW9Zwc41K2mIRleeNXjmiMjOgoAC0UgwLzPyVm%2FtSOeppDv%2F&rqlang=en&rsv_dl=ib&rsv_enter=1&rsv_sug3=4&rsv_sug1=3&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=1588&rsv_sug4=6786");string protocol, domain, uri;//协议、域名、size_t i1 = url1.find(':');if (i1 != string::npos){protocol = url1.substr(0, i1 - 0);cout << protocol << endl;}// strcharsize_t i2 = url1.find('/', i1 + 3);if (i2 != string::npos){domain = url1.substr(i1 + 3, i2 - (i1 + 3));cout << domain << endl;uri = url1.substr(i2 + 1);cout << uri << endl;}// strstr  size_t i3 = url1.find("baidu");cout << i3 << endl;std::string str("Please, replace the vowels in this sentence by asterisks.");cout << str << endl;// strtokstd::size_t found = str.find_first_not_of("aeiou");while (found != std::string::npos){str[found] = '*';found = str.find_first_not_of("aeiou", found + 1);}cout << str << endl;cout << (url1 < url2) << endl;string ss1 = "xxx";string ss2 = "yyy";string ret = ss1 + ss2;cout << ret << endl;string ret1 = ss1 + "yyyy";cout << ret1 << endl;string ret2 = "yyyy" + ss2;cout << ret2 << endl;}int main()
{test_string10();return 0;
}

find_first_not_of:

string类非成员函数

函数功能说明
operator+尽量少用,因为传值返回,导致深拷贝效率低
operator>>(重点)输入运算符重载
operator<<(重点)输出运算符重载
getline(重点)获取一行字符串
relational operators(重点)大小比较

我们来看 relational operators 的比较大小操作:

void test_string10()
{string url2("https://legacy.cplusplus.com/reference/string/string/substr/");string url1("http://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=65081411_1_oem_dg&wd=%E5%90%8E%E7%BC%80%20%E8%8B%B1%E6%96%87&fenlei=256&rsv_pq=0xc17a6c03003ede72&rsv_t=7f6eqaxivkivsW9Zwc41K2mIRleeNXjmiMjOgoAC0UgwLzPyVm%2FtSOeppDv%2F&rqlang=en&rsv_dl=ib&rsv_enter=1&rsv_sug3=4&rsv_sug1=3&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=1588&rsv_sug4=6786");cout << (url1 < url2) << endl;
}int main()
{test_string10();return 0;
}

我们再来看 operator+ 的操作:

int main()
{char ch1;wchar_t ch2;char16_t ch3;char32_t ch4;cout << sizeof(ch1) << endl;cout << sizeof(ch2) << endl;cout << sizeof(ch3) << endl;cout << sizeof(ch4) << endl;// 编码   文字计算机的存储和表示// ascll//内存/硬盘 只存01char c1 = 'a';//存储字符时,内存或硬盘会去查表,查到字符对应的数值存储到内存中cout << c1 << endl;char c2 = 98;//取字符要显示到显示器上时,内存或硬盘会查表,查到数值对应的字符,再显示出来cout << c2 << endl;return 0;
}

int main()
{int i = 1234;double d = 11.22;string s1 = to_string(i);//将整型和浮点型转换成字符串string s2 = to_string(d);string s3("45.55");double d3 = stod(s3);//stod:将字符串转换成浮点型;stoi:将字符串转换成int类型cout << typeid(std::string::iterator).name() << endl;cout << typeid(bit::string::iterator).name() << endl;//typeid://1、打印对象的类型;//2、打印类型的类型;(有些类型可能被 typedef 给重命名成了另一个名字,我们可以找到原先的类型)return 0;
}

总结

好了,本篇博客到这里就结束了,如果有更好的观点,请及时留言,我会认真观看并学习。
不积硅步,无以至千里;不积小流,无以成江海。

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

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

相关文章

REDHAWK——组件

文章目录 前言一、REDHAWK 核心资产1、REDHAWK 基本组件2、REDHAWK 基本设备3、REDHAWK 基本波形4、REDHAWK 共享库5、REDHAWK 设备依赖性 二、创建组件项目1、组件向导2、组件描述符3、端口4、属性5、记录6、为组件生成代码 三、创建并运行 Hello World 组件 前言 组件是模块…

LeetCode hot100-10

560. 和为 K 的子数组 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。子数组是数组中元素的连续非空序列。我的解法&#xff0c;就是很简单的那种两层循环&#xff0c;没啥好说的。这题是不会超时&#xff0c;能通过。 cla…

【DAY09 软考中级备考笔记】机组:信息加密,系统可靠性

机组&#xff1a;信息加密&#xff0c;系统可靠性 3月8日 – 天气&#xff1a;晴 1. 信息加密 信息加密分为了对称加密和非对称加密&#xff1a; 对称加密&#xff1a;加密和解密的密钥相同且不公开 优点是加密速度快缺点是加密的强度不高&#xff0c;密钥分发困难常见算法&…

es 聚合操作(二)

书接上文&#xff0c;示例数据在上一篇&#xff0c;这里就不展示了 一、Pipeline Aggregation 支持对聚合分析的结果&#xff0c;再次进行聚合分析。 Pipeline 的分析结果会输出到原结果中&#xff0c;根据位置的不同&#xff0c;分为两类&#xff1a; Sibling - 结果和现有…

C语言—求最大公约数(4种算法思路)

1.穷举法 如果大数可以整除小数&#xff0c;那么最大公约数为小数。如果不能整除小数&#xff0c;那么这两个数就按大到小依次对比小数小的数求余&#xff0c;遇到都能够整除的&#xff0c;就是最大公约数。 int gcd(int a, int b) {int i;int min a < b ? a : b;for (i …

“禁止互撕”新规第二天,热搜把#章子怡“怒怼”网友#推上了榜一

3月12日&#xff0c;微博热搜发布公告&#xff0c;对热搜词条处置规则进行了更新。 针对热搜词条长期以来存在的引战互撕、挑唆对立等不良现象&#xff0c;热搜生态秩序亟待改善&#xff0c;微博给出了两大解决方案&#xff1a; 一是更新热搜词条处置规则&#xff0c;当热搜词…

1456.定长子串中元音的最大数目

题目&#xff1a;给你字符串 s 和整数 k 。 请返回字符串 s 中长度为 k 的单个子字符串中可能包含的最大元音字母数。 英文中的 元音字母 为&#xff08;a, e, i, o, u&#xff09;。 解题思路&#xff1a; 1.右侧新进入窗口的字母为元音字母&#xff0c;左侧移出窗口的字母…

无源性指数

无源性指数&#xff08;Passivity Index&#xff09;是控制系统理论中的一个概念&#xff0c;用于量化系统的无源性特性。无源性是系统的一个重要属性&#xff0c;它描述了系统从外部环境中吸收能量并消耗这些能量的能力。具体来说&#xff0c;一个无源系统不能从外部环境中无限…

qiankun:vite/webpack项目配置

相关博文&#xff1a; https://juejin.cn/post/7216536069285429285?searchId202403091501088BACFF113F980BA3B5F3 https://www.bilibili.com/video/BV12T411q7dq/?spm_id_from333.337.search-card.all.click qiankun结构&#xff1a; 主应用base&#xff1a;vue3historyv…

3.1_8 两级页表

文章目录 3.1_8 两级页表&#xff08;一&#xff09;单级页表存在的问题&#xff08;二&#xff09;如何解决单级页表的问题&#xff1f;&#xff08;三&#xff09;两级页表的原理、地址结构&#xff08;四&#xff09;如何实现地址变换&#xff08;五&#xff09;需要注意的几…

QT5.14.2 探索QT的神秘力量:轻松获取MD5值的秘诀

在当今这个信息爆炸的时代&#xff0c;数据安全已经成为了我们每个人都需要关注的话题。MD5作为一种广泛使用的哈希算法&#xff0c;它的应用场景非常广泛&#xff0c;从密码存储到文件完整性校验&#xff0c;MD5都扮演着重要的角色。而在QT的世界里&#xff0c;获取MD5值就像吃…

第三方 cookie 就快被废弃了,再不玩就没机会了!

还记得初学前端时&#xff0c;一直听过 cookie&#xff0c;没碰它之前觉得特别简单&#xff0c;一听就懂。但当自己和后台成员对接时&#xff0c;那叫一个惨烈&#xff0c;搞了搞几天才好&#xff0c;最后弄好的时候还是懵懵的。最近突然看到第三方 cookie 快被废弃了&#xff…

洛谷 B3625 迷宫寻路

本道题需要注意&#xff1a;如果孩子的起始位置就是‘#’&#xff0c;那孩子就无路可走&#xff0c;出不来了。 所以需要特判一下&#xff0c;代码如下&#xff1a;&#xff08;这是废话&#xff0c;不需要特判&#xff0c;注意题目要求&#xff09; if(ch[1][1]#){printf(&q…

基于51单片机的数控直流可调电源设计[proteus仿真]

181基于51单片机的数控直流可调电源设计[proteus仿真] 电源系统这个题目算是课程设计和毕业设计中常见的题目了&#xff0c;本期是一个基于51单片机的数控直流可调电源设计 需要的源文件和程序的小伙伴可以关注公众号【阿目分享嵌入式】&#xff0c;赞赏任意文章 2&#xffe…

动态内存管理(下)

1.C/C程序的内存开辟 C/C程序内存分配的几个区域&#xff1a; 1. 栈区&#xff08;stack&#xff09;&#xff1a;在执行函数时&#xff0c;函数内局部变量的存储单元都可以在栈上创建&#xff0c;函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中…

谈谈你对Java平台的理解?

从你接触 Java 开发到现在&#xff0c;你对 Java 最直观的印象是什么呢&#xff1f;是它宣传的 “Write once, run anywhere”&#xff0c;还是目前看已经有些过于形式主义的语法呢&#xff1f;你对于 Java 平台到底了解到什么程度&#xff1f;请你先停下来总结思考一下。 今天…

java面试(缓存Redis)

为什么使用缓存 高性能&#xff0c;高可用&#xff0c;高并发。 什么是缓存击穿&#xff1f;缓存穿透&#xff1f;缓存雪崩&#xff1f; 击穿&#xff1a;redis中没有查询到数据。解决&#xff1a;设置热点数据永不过期。加载DB时防止并发。 穿透&#xff1a;redis和mysql中…

Java知识点之单例模式

1、单例模式&#xff08;Binary Search&#xff09; 单例模式确保某个类只有一个实例&#xff0c;而且自行实例化并向整个系统提供这个实例。在计算机系统中&#xff0c;线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资…

TikTok新手如何起号?环境因素与内容创新技巧

相信很多刚入行的TikTok玩家都遇到过一个难题&#xff0c;那就是账号权重低&#xff0c;播放量在个位数徘徊&#xff0c;其实都是因为还没起号&#xff01;那么具体如何起号呢&#xff1f;下面小编也给大家分享一下技巧。 一、如何起号 1、明确注册 TikTok 账号的目的 无论是…

Day46| 139 单词拆分

目录 139 单词拆分 139 单词拆分 class Solution { public:bool wordBreak(string s, vector<string>& wordDict) {unordered_set<string> wordset(wordDict.begin(), wordDict.end());//dp数组来判断i长度时能不能被字典里面的单词所组成vector<bool&g…