【C++】基础:STL字符串库string

news2024/9/28 3:23:42

😏★,°:.☆( ̄▽ ̄)/$:.°★ 😏
这篇文章主要介绍STL字符串库string。
学其所用,用其所学。——梁启超
欢迎来到我的博客,一起学习,共同进步。
喜欢的朋友可以关注一下,下次更新不迷路🥞

文章目录

    • :smirk:1. 字符串库string介绍
    • :blush:2. 字符串构造
    • :satisfied:3. 元素访问
    • :satisfied:4. 容量操作
    • :satisfied:5. 迭代器
    • :satisfied:6. 字符串相关操作
    • :satisfied:7. string_view

😏1. 字符串库string介绍

在C++中,std::string是一个表示字符串的类,它是C++标准库中的一部分。std::string提供了许多功能和操作,使得字符串的处理更加方便和高效。

参考:https://zh.cppreference.com/w/cpp/string/basic_string

std::string的使用使得字符串的处理更加方便和安全,它提供了许多成员函数和操作符重载来简化字符串的操作。在C++中,std::string通常是首选的字符串表示方式,而不是C风格的字符数组。

😊2. 字符串构造

#include <iostream>
#include <string>

using namespace std;

int main()
{
    cout << __cplusplus << endl;  // -std=c++17
    
    // 1.无参构造
    string str;

    // 2.用=赋值
    string str2 = "hello";

    // 3.用char*传参
    string str3("ABC");

    // 4.重复字符构造
    string str4(10, 'A');

    // 5.拷贝构造
    string str5(str2);

    // 6.移动构造
    string str6(move(str5));

    // 7.构造指定范围内的字符
    string str7(str2, 3, 2);

    // 8.字符串拼接
    string str8 = str2 + " " + str3;
    cout << str8 << endl;
    
    return 0;
}

😆3. 元素访问

在这里插入图片描述

#include <iostream>
#include <string>

using namespace std;

int main()
{
    cout << __cplusplus << endl;  // -std=c++17
    
    // 元素访问有以下几种方式
    // 1.at()
    // 2.[]
    // 3.front()
    // 4.back()
    // 5.c_str()
    // 6.data()

    string str = "hello world";
    str.at(2) = 'a';
    cout << str.at(2) << endl;
    cout << str[1] << endl;
    cout << str.front() << endl;
    cout << str.back() << endl;
    cout << str.c_str() << endl;
    cout << str.data() << endl;
    
    return 0;
}

😆4. 容量操作

在这里插入图片描述

#include <iostream>
#include <string>

using namespace std;

int main()
{
    cout << __cplusplus << endl;  // -std=c++17
    
    // 容量操作
    // 1.empty()
    // 2.size() length() 字节
    // 3.max_size()
    // 4.resize(size_type cnt) resize(size_type cnt, CharT ch)
    // 5.reserve()
    // 6.capacity()
    // 7.shrink_to_fit()
    string str = "hello world";
    string str2 = "你好";
    cout << boolalpha << str.empty() << endl;
    cout << str2.size() << endl; // 一个汉字3字节
    cout << str.length() << endl;
    cout << str.max_size() << endl;
    // str.resize(10);
    str.resize(20, 'A');
    cout << str << endl;
    cout << str.capacity() << endl; // 分配的容量

    str.reserve(100); // 分配100个字符的容量
    cout << str.capacity() << endl;
    str.shrink_to_fit(); // 减少容量
    cout << str.capacity() << endl;
    
    return 0;
}

😆5. 迭代器

在这里插入图片描述

#include <iostream>
#include <string>

using namespace std;

int main()
{
    cout << __cplusplus << endl;  // -std=c++17
    
    // 迭代器 - 为容器类提供统一的遍历接口
    // 1.正向迭代器 iterator
    // 2.正向只读迭代器 const_iterator
    // 3.反向迭代器 reverse_iterator
    // 4.反向只读迭代器 const_reverse_iterator
    string str = "hello world";
    string::iterator it = str.begin(); // auto string::iterator(不可修改)
    cout << *it << endl; // h
    it++; // it += 2
    cout << *it << endl; // e
    *it = 'E';
    cout << *it << endl; // E
    cout << str << endl;

    for (; it != str.end(); it++)
    {
        cout << *it << endl; // print
    }

    string::reverse_iterator rit = str.rbegin();
    for (; rit != str.rend(); rit++)
    {
        cout << *rit << endl; // reverse print
    }
    
    return 0;
}

😆6. 字符串相关操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include <iostream>
#include <string>

using namespace std;

int main()
{
    cout << __cplusplus << endl;  // -std=c++17
    
    // 字符串相关操作
    // 1.==
    // 2.compare()
    // 3.starts_with() ends_with() // std20
    // 4.contains() // std23
    // 5.append()
    // 6.insert()
    // 7.push_back()
    // 8.pop_back()
    // 9.clear()
    // 10.erase()
    // 11.replace()
    // 12.substr()
    // 13.find()
    // 14.rfind()
    // 15.to_string()
    // 16.stoi() stof()
    // 17.hash
    string str = "hello world";
    string str2 = "Hello World";

    cout << boolalpha << (str == str2) << endl;
    cout << (str2.compare(str) == 0) << endl;

    cout << str.append("!!!").append(" C++") << endl;
    cout << str.insert(5, ",") << endl;
    str.push_back('!');
    str.pop_back();
    cout << str << endl;
    // cout << str.erase(5, 6) << endl;
    // str.clear();

    str.replace(str.begin(), str.end(), str2);
    cout << str << endl;
    cout << str.substr(2) << endl;

    cout << str.find("lo") << endl; // 用 npos 判断索引
    cout << str.rfind("l") << endl;

    cout << stoi("123") << endl;
    cout << stof("123.45") << endl;
    cout << to_string(123) << endl;

    hash<string> hs;
    cout << hs(str) << endl; // 计算哈希值
    
    return 0;
}

😆7. string_view

#include <iostream>
#include <string>
#include <string_view>

using namespace std;

int main()
{
    cout << __cplusplus << endl;  // -std=c++17
    
    // string_view 字符串共享内存,避免重新分配
    const char *s = "hello, c++ stl";
    cout << uintptr_t(s) << endl;

    string_view sv = s;
    cout << uintptr_t(sv.data()) << endl;
    cout << sv << endl;

    // 移除字节
    sv.remove_prefix(7);
    cout << sv << endl;
    
    return 0;
}

请添加图片描述

以上。

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

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

相关文章

【Maven】004-基于 IDEA 构建 Maven 工程

【Maven】004-基于 IDEA 构建 Maven 工程 文章目录 【Maven】004-基于 IDEA 构建 Maven 工程一、概述1、项目构建2、命令方式项目构建命令war 包打包插件和 jdk 版本不匹配 二、项目构建1、命令方式2、IDEA 可视化方式3、构建产物 一、概述 1、项目构建 项目构建是将软件开发…

数据结构初探:揭开数据结构奥秘

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;数据结构、算法模板、汇编语言 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 数组结构起源二. 基本概念和术语2.1 数据2.2 数据元素2.3 数据项2.4 …

点的旋转变换

情形一&#xff08;active or alibi transformation主动变换&#xff09; 在坐标系 x − y x-y x−y中&#xff0c;点 p 1 p_1 p1​逆时针旋转 α \alpha α后到达点 p 2 p_2 p2​。 p 1 p_1 p1​在 x − y x-y x−y中的表示与 p 2 p_2 p2​在 x ′ − y ′ x-y x′−y′中的表…

C# Cad2016二次开发HelloWorld(一)

1 新建类库 二 引用 acdbmgd.dll、acmgd.dll、accoremgd.dll 三 HelloWorld代码 public class Class1{/// <summary>/// 程序入口标识/// </summary>[CommandMethod("HelloWorld")]public void HelloWorld(){Document adoc Autodesk.AutoCAD.Applicatio…

将WAP网站封装成App体验的全新策略

一、传统的App封装方式 传统的App封装技术通常依赖于WebView组件&#xff0c;将WAP内容嵌入到一个原生App框架中。这种方法虽然可以快速实现WAP到App的转换&#xff0c;但存在着明显的缺陷&#xff1a;首先&#xff0c;WebView的性能和用户体验都无法与原生组件相提并论&#x…

STM32H5培训(一)总览

文章目录 1. 前言2. STM32H5系列MCU的特点和新功能包括性能提升、新外设和安全功能等3. STM32H5系列型号之间的区别和关键资源对比4. 性能和功能亮点6. 开发生态参考&#xff1a; 1. 前言 本篇主要介绍STM32H5系列MCU的特点和新功能&#xff0c;包括全新的M33内核、250M主频处…

【GNN2】PyG完成图分类任务,新手入门,保姆级教程

上次讲了如何给节点分类&#xff0c;这次我们来看如何用GNN完成图分类任务&#xff0c;也就是Graph-level的任务。 【GNN 1】PyG实现图神经网络&#xff0c;完成节点分类任务&#xff0c;人话、保姆级教程-CSDN博客 图分类就是以图为单位的分类&#xff0c;举个例子&#xff1…

初识 Elasticsearch 应用知识,一文读懂 Elasticsearch 知识文集(1)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

150套简约流行国内外优秀网页模板打包 /个人主页网站html模板 /html+css网页设计源码(分享)

这里把自己收藏的最新150套简约流行国内外优秀网页模板打包分享给大家&#xff0c;如果有用请点赞收藏&#xff0c;无密源码&#xff0c;直接拿来就可以用的。它是htmlcss网页设计源码&#xff0c;html5网页静态模板。 我分了品类&#xff0c;按行业或应用场景&#xff0c;不但…

unity C#深拷贝、浅拷贝、直接赋值区别与经典实例

文章目录 浅拷贝深拷贝浅拷贝和直接赋值有啥区别 在C#中&#xff0c;浅拷贝&#xff08;Shallow Copy&#xff09;和深拷贝&#xff08;Deep Copy&#xff09;是两种不同级别的对象复制方式。它们的区别主要体现在处理引用类型字段时的行为。 浅拷贝 浅拷贝是指复制对象时&…

git修改历史(非最新)提交信息

二、修改最近第二次或更早之前的commit信息 当前有三次提交&#xff0c;从近到远分别为1、2、3 以修改第2次提交为例&#xff08;从最新往前数&#xff09; 1、使用命令git rebase -i HEAD~2 按i进入编辑模式&#xff0c;将对应的pick改为edit&#xff0c;然后ctrlc退出。最…

如何用ChatGPT写教案设计?以“沁园春雪”为例

1. 引言 随着人工智能技术的飞速发展&#xff0c;ChatGPT已成为教育领域的一大创新工具。ChatGPT不仅能够模拟人类对话&#xff0c;还可以帮助设计互动丰富、内容丰富的教案。本文将探索如何利用ChatGPT进行教案教学设计&#xff0c;特别是通过“沁园春雪”这一案例&#xff0…

版本控制系统教程

1.Git的基本介绍 1.1 Git的概念 Git是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目.Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件.Git与常用的版本控制工具CVS&#xff0c;Subversion等不同&#xff…

Vue-17、Vue人员列表过滤(案例)

1、watch实现 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>列表渲染过滤</title><script type"text/javascript" src"https://cdn.jsdelivr.net/npm/vue2/dist/vue.js&qu…

恭喜:ChatGPT之父与相恋多年的男友结婚,并希望早日生娃。。。

OpenAI CEO Sam Altman与伴侣Oliver Mulherin海边私密婚礼&#xff1a;爱情、事业与人工智能领域的交织 婚礼主持人是奥特曼的兄弟杰克奥尔特曼 壹.媒体流传 在科技界掀起波澜的OpenAI首席执行官萨姆奥尔特曼&#xff08;Sam Altman&#xff09;&#xff0c;近期与他长久以来的…

Linux第27步_在虚拟机中安装“设备树编译工具”

设备树英文名字叫做Device tree&#xff0c;用来描述板子硬件信息的&#xff0c;比如开发板上的 CPU有几个核 、每个CPU核主频是多少&#xff0c;IIC、SPI这些外设的寄存器范围是多少&#xff0c;IIC接口下都挂了哪些设备等等。 设备树文件是一种文本格式的文件&#xff0c;方…

VirtualBox安装linuxmint-21.2虚拟机并配置网络

VirtualBox安装linuxmint-21.2虚拟机并配置网络 适用于在VirtualBox平台上安装linuxmint-21.2虚拟机。 1. 安装准备 1.1 安装平台 Windows 11 1.2. 软件信息 软件名称软件版本安装路径Oracle VM VirtualBoxVirtualBox-7.0.12-159484D:\softwareCentOS7CentOS-7.9.2009E:\…

华为路由器OSPF动态链路路由协议配置

R1配置 interface GigabitEthernet0/0/0ip address 10.1.12.1 255.255.255.252 interface LoopBack0ip address 1.1.1.1 255.255.255.255 ospf 1 router-id 1.1.1.1 area 0.0.0.0 network 1.1.1.1 0.0.0.0 network 10.1.12.0 0.0.0.3 R2配置 interface GigabitEthernet0/0/0i…

精细微调技术在大型预训练模型优化中的应用

目录 前言1 Delta微调简介2 参数微调的有效性2.1 通用知识的激发2.2 高效的优化手段3 Delta微调的类别3.1 增量式微调3.2 指定式微调3.3 重参数化方法 4 统一不同微调方法4.1 整合多种微调方法4.2 动态调整微调策略4.3 超参数搜索和优化 结语 前言 随着大型预训练模型在自然语…

[Beego]1.Beego简介以及beego环境搭建,bee脚手架的使用,创建,运行项目

一.Beego介绍 Beego是一个开源的基于Golang的MVC框架&#xff0c;主要用于Golang Web开发,Beego可以用来快速开发API、Web、后端服务等各种应用。 Golang 的Web开发框架有很多,从 github star 数量来看Gin>Beego>lris>Echo>Revel>Buffalo 目前国内用的比较多的就…