【C++】学习笔记——string_3

devtools/2024/10/18 23:27:23/

文章目录

  • 六、string类
    • 5. string类的操作
    • 6. string类的转换
    • 7. string类的模拟实现
  • 未完待续


搭配文档食用

六、string类

5. string类的操作

在这里插入图片描述
上面的函数中,有些是不常用的,咱们只挑几个重要的进行讲解。
c_str 就是将字符串转换成 C语言 字符串的格式。
get_allocator 就是申请内存池,目前用不上。
copy 就是拷贝,缺点是必须先创建好一个字符数组,字符数组还是形参,返回拷贝的个数,被下面的 substr 函数完虐。substr 函数返回一个 string 类型。
假设有个情景:需要我们找出文件名的后缀,该怎么办?

#include<iostream>
#include<string>
using namespace std;void test1()
{string s("file.cpp");// find函数返回第一个出现的下标size_t pos = s.find('.');// 在string类里,没找到都会以npos的形式返回。if (pos != string::npos){string suffix = s.substr(pos);cout << suffix << endl;}
}int main()
{test1();return 0;
}

在这里插入图片描述
find 函数
在这里插入图片描述
substr 函数
在这里插入图片描述
那么假设这个文件里 . 很多,我们要返回最后一个后缀,该怎么办?这个时候,就到了 rfind 大展身手的时候了,rfind 函数也是查找,不过是从后往前查找。

#include<iostream>
#include<string>
using namespace std;void test2()
{string s("file.cpp.rar.zip.tar");size_t pos = s.rfind('.');if (pos != string::npos){string suffix = s.substr(pos);cout << suffix << endl;}
}int main()
{test2();return 0;
}

在这里插入图片描述
再假设一个情景,有一个网址,将其 协议域名资源名 给分离开,怎么搞呢?

#include<iostream>
#include<string>
using namespace std;void test3()
{string url("https://cplusplus.com/reference/string/string/substr/");// 协议string protocol;// 域名string domain;// 资源名string uri;size_t i1 = url.find(":");if (i1 != string::npos){protocol = url.substr(0, i1 - 0);cout << protocol << endl;}// 从域名开始找 '/'size_t i2 = url.find('/', i1 + 3);if (i2 != string::npos){domain = url.substr(i1 + 3, i2 - i1 - 3);cout << domain << endl;// 剩下的都是资源名uri = url.substr(i2 + 1);cout << uri << endl;}
}int main()
{test3();return 0;
}

在这里插入图片描述
compare 就是比较,不过 string 针对比较都做了重载,可用直接用 > ! = 等比较。

6. string类的转换

当我们涉及到其他类型转换成字符串类型时,有这样一个函数:
在这里插入图片描述

#include<iostream>
#include<string>
using namespace std;void test4()
{int a = 123456;string s = to_string(a);cout << s << endl;
}int main()
{test4();return 0;
}

在这里插入图片描述
当然,有其他类型转换成字符串类型,就有字符串类型转换成其他类型。

在这里插入图片描述

#include<iostream>
#include<string>
using namespace std;void test5()
{string s1("13579");string s2("3.1415926");int i = stoi(s1);double d = stod(s2);cout << i << endl << d << endl;
}int main()
{test5();return 0;
}

在这里插入图片描述

7. string类的模拟实现

接下来我们来具体实现一下 string 类。在实现 string 类的时候,我们需要将其封装一下,包含在自己的命名空间下。

// string.h 头文件下
#pragma once
#include<iostream>// 我们自己实现的 string 类的专属命名空间
namespace my
{class string{public://private:// 字符数组 存数据char* _str;// 无符号整形 存数据个数、字符串的长度size_t _size;// 存为该字符串已经分配的空间、容量size_t _capacity;};
}

接下来我们来实现构造函数,分为无参构造函数,和有参构造函数。

// my 命名空间下
class string
{
public:// 无参构造函数string():_str(nullptr)  // 初始化列表,_size(0),_capacity(0){}// 有参构造函数string(const char* str):_size(strlen(str)){_capacity = _size;_str = new char[_capacity + 1];strcpy(_str, str);}
private:char* _str;size_t _size;size_t _capacity;
};

构造函数不一定非要使用初始化列表,我们在有参构造函数里面若是使用初始化列表,由于三个对象都需要调用 strlen 函数,导致效率不高,所以可以初始化列表和赋值一起使用。


未完待续


http://www.ppmy.cn/devtools/27250.html

相关文章

Vue ui 创建vue项目,详细使用攻略。

1.安装及启动 1.1 Vue ui 使用前提是全局安装vue.js 命令如下 npm install vue -g 1.2 安装过Vue.js 之后 随便在自己系统的一个地方打开命令面板 1.3 使用命令启动vue ui面板创建项目 vue ui 如图运行后显示这种就是启动成功&#xff0c;成功之后会弹出页面或者直接访问你的…

Vue阶段练习:初始化渲染、获取焦点、记账清单

阶段练习主要承接Vue 生命周期-CSDN博客 &#xff0c;学习完该部分内容后&#xff0c;进行自我检测&#xff0c;每个练习主要分为效果显示、需求分析、静态代码、完整代码、总结 四个部分&#xff0c;效果显示和准备代码已给出&#xff0c;我们需要完成“完整代码”部分。 练习…

5个数据科学中常用的高级SQL操作

大家好&#xff0c;在数据科学领域&#xff0c;SQL&#xff08;结构化查询语言&#xff09;发挥着重要作用&#xff0c;不仅是数据管理的基石&#xff0c;更是深入挖掘和分析数据中宝贵信息的强有力工具。虽然基础的SQL命令对于数据查询不可或缺&#xff0c;但精通高级SQL技巧则…

elasticsearch 聚合查询

文章目录 前言elasticsearch 聚合查询1. 桶聚合2. 度量聚合3. 嵌套聚合4. 指标聚合 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实在…

面试:ThreadLocal

目录 1、ThreadLocal可以实现〔资源对象】的线程隔离&#xff0c;让每个线程各用各的【资源对象】&#xff0c;避免争用引发的线程安全问题 2、ThreadLocal同时实现了线程内的资源共享 3、原理 4、为什么ThreadLocalMap 中的 key (即 ThreadLocal &#xff09;要设计为弱引用…

Django后台项目开发实战三

优化添加职位功能 第三阶段 我们希望添加职位时&#xff0c;自动填入当前时间 修改 models.py 的代码&#xff0c;导入时间包&#xff0c;为创建日期和修改时间添加默认值 from datetime import datetimeclass Job(models.Model): ...created_date models.DateTimeField(v…

【QA】Git常用命令

前言 本文主要讲述Git常用的命令。 基本命令 配置相关命令 # 设置单一仓库的用户信息 git config user.name “itcast” git config user.email “itcastitcast.cn”# 设置全局仓库的用户信息&#xff0c;通过下面命令设置的信息会保存在~/.gitconfig文件中 git config --…

大语言模型在人类层面预测未来的研究与应用

概述 这项研究将探讨语言模型&#xff08;LM&#xff09;能否预测未来事件。在这项研究中&#xff0c;将开发一个系统来自动收集信息、生成和汇总预测结果。将从一个竞争性预测平台收集有关问题的数据&#xff0c;以评估 LM 的预测能力。结果表明&#xff0c;LM 可以与具有竞争…