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

news/2024/10/11 13:24:51/

文章目录

  • 六、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/news/1455551.html

相关文章

红米1s 刷入魔趣 (Mokee)ROM(Android 7.1)

目录 背景准备工具硬件&#xff08;自己准备&#xff09;软件&#xff08;我会在文末提供链接&#xff09; 刷机步骤1. 重启电脑2. 安装驱动3. 刷入TWRP4. 清空数据5. 刷入魔趣6. 开机 结尾下载链接 本文由Jzwalliser原创&#xff0c;发布在CSDN平台上&#xff0c;遵循CC 4.0 B…

esp32-cam 1. 出厂固件编译与测试

0. 环境 - ubuntu18 - esp32-cam - usb转ttl ch340 硬件连接 esp32-camch340板子U0RTXDU0TRXDGNDGND5V5V 1. 安装依赖 sudo apt-get install vim sudo apt install git sudo apt-get install git wget flex bison gperf python python-pip python-setuptools python-serial p…

Flink时间语义 | 大数据技术

⭐简单说两句⭐ ✨ 正在努力的小叮当~ &#x1f496; 超级爱分享&#xff0c;分享各种有趣干货&#xff01; &#x1f469;‍&#x1f4bb; 提供&#xff1a;模拟面试 | 简历诊断 | 独家简历模板 &#x1f308; 感谢关注&#xff0c;关注了你就是我的超级粉丝啦&#xff01; &a…

基于TL431和CSA的恒压与负压输出

Hello uu们,51去那里玩了呀?该收心回来上班了,嘿嘿! 为什么会有这个命题,因为我的手头只有这些东西如何去实现呢?让我们一起来看电路图吧.电路图如下图1所示 图1:CSA恒压输出电路 图1中,R1给U2提供偏置,Q1给R1提供电流,当U1-VOUT输出大于2.5V时候,U2内部的三极管CE导通,使得…

秋招后端开发面试题 - MySQL事务

目录 MySQL事务前言面试题什么是数据库事务为什么要有事务呢&#xff1f;项目中遇到的事务事务的传播机制事务的特性&#xff1f;事务并发存在的问题四大隔离级别四大隔离级别&#xff0c;都会存在哪些并发问题呢数据库是如何保证事务的隔离性的呢&#xff1f;如何解决加锁后的…

【StarRocks系列】 Trino 方言支持

我们在之前的文章中&#xff0c;介绍了 Doris 官方提供的两种方言转换工具&#xff0c;分别是 sql convertor 和方言 plugin。StarRocks 目前同样也提供了类似的方言转换功能。本文我们就一起来看一下这个功能的实现与 Doris 相比有何不同。 一、Trino 方言验证 我们可以通过…

如何根据IP获取国家省份城市名称PHP免费版

最近项目遇到需要根据IP获取用户国家功能需求&#xff0c;网上找了一下&#xff0c;很多API接口都需要付费&#xff0c;考虑为公司节约成本&#xff0c;就取找找有没有开源的 github 上面那个包含多种语言&#xff0c;下面这个只有php&#xff0c;用法很简单 $ip 114.114.114…

CNN笔记详解

CNN(卷积神经网络) 计算机视觉&#xff0c;当你们听到这一概念的是否好奇计算机到底是怎样知道这个图片是什么的呢&#xff1f;为此提出了卷积神经网络&#xff0c;通过卷积神经网络&#xff0c;计算机就可以识别出图片中的特征&#xff0c;从而识别出图片中的物体。看到这里充…