【C++STL基础入门】深入浅出string类查找字串、返回字串和交换操作

news2024/10/7 18:23:37

文章目录

  • 前言
  • 一、查找字串
  • 二、返回字串
  • 三、交换字串
  • 四、运算符重载
  • 总结


前言

本STL使用VS2022+C++20版本

C++标准库(Standard Template Library,简称STL)是C++中非常强大和常用的一组容器、算法和函数模板,它能大大简化程序开发和提高开发效率。在STL中,string类是对字符串进行处理的重要组成部分。本文将向您介绍string类的三个基本操作:查找子串(find)、返回子串(substr)和交换操作(swap),帮助您更好地理解和应用这些功能。


一、查找字串

1、size_type find( const basic_string &str, size_type index );
此函数用于在字符串中查找给定子串 str 的第一个位置。它接收两个参数:str 是要查找的子串,index 是在哪个位置开始搜索。函数返回找到的子串的第一个字符的索引位置,如果找不到子串,则返回 string::npos。

示例代码:

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello, world!";
    std::string sub = "world";

    size_t found = str.find(sub, 0);  // 在整个字符串中搜索
    if (found != std::string::npos) {
        std::cout << "子串 " << sub << " 在索引位置 " << found << " 处被找到。" << std::endl;
    } else {
        std::cout << "未找到子串 " << sub << "。" << std::endl;
    }

    return 0;
}

输出:
在这里插入图片描述

2、size_type find( const char *str, size_type index );
此函数用于在字符串中查找给定 C-风格字符串 str 的第一个位置。它接收两个参数:str 是要查找的C-风格字符串,index 是在哪个位置开始搜索。函数返回找到的子串的第一个字符的索引位置,如果找不到子串,则返回 string::npos。

示例代码:

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello, world!";
    const char* sub = "world";

    size_t found = str.find(sub, 0);  // 在整个字符串中搜索
    if (found != std::string::npos) {
        std::cout << "C-风格字符串 " << sub << " 在索引位置 " << found << " 处被找到。" << std::endl;
    } else {
        std::cout << "未找到 C-风格字符串 " << sub << "。" << std::endl;
    }

    return 0;
}

输出:
在这里插入图片描述

3、size_type find( char ch, size_type index );
此函数用于在字符串中查找给定字符 ch 的第一个位置。它接收两个参数:ch 是要查找的字符,index 是在哪个位置开始搜索。函数返回找到的字符的索引位置,如果找不到字符,则返回 string::npos。

示例代码:

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello, world!";
    char ch = 'o';

    size_t found = str.find(ch, 0);  // 在整个字符串中搜索
    if (found != std::string::npos) {
        std::cout << "字符 " << ch << " 在索引位置 " << found << " 处被找到。" << std::endl;
    } else {
        std::cout << "未找到字符 " << ch << "。" << std::endl;
    }

    return 0;
}

输出:
在这里插入图片描述

二、返回字串

1、substr( size_type index, size_type num = npos );
此函数用于截取原字符串的子串,并返回新的字符串作为结果。它接收两个参数:index 是要开始截取的索引位置,num 是要截取的字符数。参数 num 是可选的,如果未提供,则默认截取从 index 一直到字符串末尾的所有字符。函数的返回类型是 basic_string。注意,index 参数必须在有效范围内,否则可能会导致未定义行为。

示例代码:

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello, world!";
    
    std::string sub1 = str.substr(7);  // 从索引位置 7 开始截取到字符串末尾
    std::cout << "截取子串1: " << sub1 << std::endl;
    
    std::string sub2 = str.substr(7, 5); // 从索引位置 7 开始截取 5 个字符
    std::cout << "截取子串2: " << sub2 << std::endl;

    return 0;
}

输出:
在这里插入图片描述

三、交换字串

1、swap( basic_string &str );
此函数用于交换两个字符串的内容。它接收一个参数 str,是要交换内容的另一个字符串。该函数不返回任何值,它直接修改了原字符串和传入的字符串。

示例代码:

#include <iostream>
#include <string>

int main() {
    std::string str1 = "Hello";
    std::string str2 = "World";
    
    std::cout << "交换前:" << std::endl;
    std::cout << "str1: " << str1 << std::endl;
    std::cout << "str2: " << str2 << std::endl;
    
    str1.swap(str2);  // 交换字符串内容

    std::cout << "交换后:" << std::endl;
    std::cout << "str1: " << str1 << std::endl;
    std::cout << "str2: " << str2 << std::endl;
    
    return 0;
}

输出:
在这里插入图片描述

四、运算符重载

1、输入输出
<<:用于将字符串输出到流中。
>>:用于从流中读取字符串。
示例代码:

#include <iostream>
#include <string>

int main() {
    std::string str;
    
    // 从标准输入读取字符串
    std::cout << "请输入一个字符串:";
    std::cin >> str;
    
    // 将字符串输出到标准输出
    std::cout << "输入的字符串为:" << str << std::endl;
    
    return 0;
}

2、下标运算
下标运算符 []:
用于访问字符串中指定索引位置的字符。

示例代码:

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello";
    
    // 访问字符串中的第一个字符
    char firstChar = str[0];
    std::cout << "第一个字符为:" << firstChar << std::endl;
    
    return 0;
}

3、赋值
+=:用于将右侧字符串附加到左侧字符串。
=:用于将右侧字符串赋值给左侧字符串。
示例代码:

#include <iostream>
#include <string>

int main() {
    std::string str1 = "Hello";
    std::string str2 = " World!";
    
    // 使用+=将两个字符串连接起来
    str1 += str2;
    std::cout << "连接后的字符串为:" << str1 << std::endl;
    
    // 使用=将str2赋值给str1
    str1 = str2;
    std::cout << "赋值后的字符串为:" << str1 << std::endl;
    
    return 0;
}

4、比较
==
>
<
>=
<=
!=
用于比较两个字符串的大小关系。

示例代码:

#include <iostream>
#include <string>

int main() {
    std::string str1 = "Hello";
    std::string str2 = "World";
    
    // 比较两个字符串是否相等
    if (str1 == str2) {
        std::cout << "字符串相等" << std::endl;
    } else {
        std::cout << "字符串不相等" << std::endl;
    }
    
    // 比较两个字符串的大小关系
    if (str1 > str2) {
        std::cout << "str1 大于 str2" << std::endl;
    } else if (str1 < str2) {
        std::cout << "str1 小于 str2" << std::endl;
    } else {
        std::cout << "str1 等于 str2" << std::endl;
    }
    
    return 0;
}

5、计算
+用于将两个字符串进行连接。

示例代码:

#include <iostream>
#include <string>

int main() {
    std::string str1 = "Hello";
    std::string str2 = " World!";
    
    // 将两个字符串进行连接
    std::string result = str1 + str2;
    std::cout << "连接后的字符串为:" << result << std::endl;
    
    return 0;
}

总结

在本文中,我们深入浅出地介绍了C++ STL中的string类的三个基本操作:查找子串(find)、返回子串(substr)和交换操作(swap)。通过使用这些操作,您可以方便地在字符串中查找子串、提取子串并交换字符串内容。这些功能为您处理字符串提供了便利,可以增加程序的灵活性和功能。

希望通过这篇文章,您能更好地理解和掌握C++的STL中的string类的操作,并在实际开发中灵活运用。祝您编程愉快!
在这里插入图片描述

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

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

相关文章

MySQL高级篇——MySQL架构篇2(MySQL的数据目录)

目录 1 MySQL8的主要目录结构1.1 数据库文件的存放路径1.2 相关命令目录1.3 配置文件目录 2 数据库和文件系统的关系2.1 查看默认数据库2.2 数据库在文件系统中的表示2.3.1 InnoDB存储引擎模式2.3.2 MyISAM存储引擎模式 2.4 总结2.5 视图在文件系统中的表示2.6 其他的文件 1 My…

【Linux】vim编辑器

这一趴我们要学习vim编辑器&#xff0c;知道vim是什么、掌握它的3种模式以及学会其常见操作。 目录 Ⅰ. 引入 Ⅱ. 什么是vim&#xff1f; Ⅲ. 3种模式 Ⅳ. 常见操作 命令模式下 复制粘贴组 撤销组 光标定位组 光标移动组 剪切组 切换、替换组 删除组 底行模式下 …

AI+游戏线下沙龙活动暨COC上海城市开发者社区8月活动

引言 近年来&#xff0c;随着人工智能技术的不断发展和游戏开发技术的不断更新&#xff0c;越来越多的游戏公司开始将人工智能技术应用于游戏领域&#xff0c;以提高开发效率、降低成本&#xff0c;实现游戏玩家更好的游戏体验。为了探讨AI游戏的技术实践经验&#xff0c;近日在…

Spring Cloud Alibaba笔记

&#x1f600;&#x1f600;&#x1f600;创作不易&#xff0c;各位看官点赞收藏. 文章目录 Spring Cloud Alibaba 笔记1、Nacos 服务注册和配置中心1.1、Nacos 之下载启动1.2、Nacos 之注册中心1.3、Nacos 之服务发现1.4、Nacos 之配置中心1.5、Nacos 之分类配置1.6、Nacos 之…

【OpenGauss源码学习 —— 执行算子(Result 算子)】

执行算子&#xff08;Result 算子&#xff09; 控制算子Result 算子ExecInitResult 函数ResultState 结构体ExecInitResultTupleSlot 函数ExecAllocTableSlot函数 ExecResult 函数TupleTableSlot 结构体ExecProcNode 函数ExecProcNodeByType 函数ExecProject 函数 ExecEndResul…

docker版jxTMS使用指南:使用jxTMS提供数据

本文讲解了如何jxTMS的数据访问框架&#xff0c;整个系列的文章请查看&#xff1a;docker版jxTMS使用指南&#xff1a;4.4版升级内容 docker版本的使用&#xff0c;请查看&#xff1a;docker版jxTMS使用指南 4.0版jxTMS的说明&#xff0c;请查看&#xff1a;4.0版升级内容 4…

韶音的骨传导耳机怎么样,韶音骨传导耳机是真的骨传导吗

韶音骨传导耳机最为受瞩目的是OpenRun Pro&#xff0c;在发声单元位置上采用了开孔的处理&#xff0c;佩戴上耳的时候发声单元可以贴合耳道&#xff0c;在低频延伸性&#xff0c;但在中高频的时候整体会出现震感&#xff0c;纤细的耳挂在佩戴的时候是有着不错的舒适度的&#x…

Java SpringBoot+Vue 的班级综合测评管理系统的设计与实现(2.0 版本)

文章目录 1. 简介2. 技术栈 3. 需求分析用户需求分析功能需求分析系统性能需求分析 4系统总体设计与实现4.1总体设计 5 系统功能的详细设计与实现5.1 管理员功能模块5.2学生功能模块5.3教师功能模块 源码下载地址 1. 简介 传统的班级综合测评管理系统&#xff0c;一开始都是手工…

Django实现音乐网站 ⒀

使用Python Django框架制作一个音乐网站&#xff0c; 本篇主要是推荐页-推荐排行榜、推荐歌手功能开发。 目录 推荐页开发 推荐排行榜 单曲表增加播放量 表模型增加播放量字段 执行表操作 模板中显示外键对应值 表模型外键设置 获取外键对应模型值 推荐排行榜视图 推…

基于web的鲜花商城系统java jsp网上购物超市mysql源代码

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 基于web的鲜花商城系统 系统有2权限&#xff1a;前台…

HCIA---访问控制列表

文章目录 目录 前言 一.ACL简介&#xff1a; 二.ACL工作原理 ACL组成&#xff1a; ​编辑 规则编号&#xff1a; ACL匹配规则&#xff1a; 总结 前言 一.ACL简介&#xff1a; ACL全称为Access Control List&#xff0c;即访问控制表&#xff0c;是一种用于控制网络资源访问…

微软韦青:滑向冰球将要到达的位置 | 科创人数智思维私董会第9期回顾

2023年8月5日&#xff0c;由科创人、北航投资联手创办的科创人数智思维私董会第9期圆满举行。 微软&#xff08;中国&#xff09;首席技术官韦青担任本次活动引导嘉宾&#xff0c;近20位来自传统企业、科创企业、投资机构的CEO、技术决策者及领域专家&#xff0c;围绕新人-机时…

【技术篇】• 饮用水除硝酸盐、地下水除砷、矿泉水除溴的技术汇总

我们所说的“自来水”是指从水龙头里放出来的水。但从水龙头里放出来并不等于安全卫生。实际上&#xff0c;原水必须经过各种处理措施之后才能称为安全卫生的饮用水。每一滴水都要经过了混凝、沉淀、过滤、消毒四个步骤的处理&#xff0c;才能去除杂质和细菌&#xff0c;变得安…

恒运资本:简易程序定增是什么意思?

近年来&#xff0c;在我国股市中&#xff0c;简易程序定增成为了一种受欢迎的融资方法。许多人听过它但并不知道它的含义和工作原理。在本文中&#xff0c;我们将从多个角度来分析简易程序定增。 一、什么是简易程序定增&#xff1f; 简易程序定增是指在不需求经过股东大会批阅…

这6本期刊不再被收录!8月SCISSCI期刊目录已更新~

【SciencePub学术】2023年8月21日&#xff0c;科睿唯安更新了Web of Science核心期刊目录。 此次更新后SCIE期刊目录共包含9496本期刊&#xff0c;SSCI期刊目录共包含3554本期刊。此次SCIE & SSCI期刊目录更新&#xff0c;与上次更新&#xff08;2023年7月&#xff09;相比…

AD四层板设计(Altium Designer)

AD绘制四层板 前言一、正片层和负片层介绍二、PCB板的叠层设计1.两层板的叠层2.四层板的叠层 三、规则设计参考资料 前言 1、用 Altium Designer 软件绘制电路时&#xff0c;通常2层板能实现设计需求。遇到板框固定&#xff0c;元器件密集的情况下&#xff0c;2 层板无法实现预…

万字长文带你快速了解整个Flutter开发流程

文章目录 背景1.简介与优势Flutter是什么&#xff1f;为什么选Flutter&#xff1f; 2.开发环境搭建安装Flutter SDK配置开发环境 3.创建项目项目结构概览&#xff1a; 4.UI 构建与布局什么是Widget&#xff1a;StatelessWidget和StatefulWidget&#xff1a;Widget的组合&#x…

不规则透明屏:工作原理和特点应用详解

不规则透明屏是一种新型的显示技术&#xff0c;它可以将图像或视频投射到任意形状的透明屏上&#xff0c;使得观众可以从不同角度观看到清晰的图像。 这种技术可以应用于各种领域&#xff0c;如广告、展览、商场等&#xff0c;具有很大的市场潜力。 不规则透明屏的工作原理是…

5款很少人知道的小众软件,先收藏再下载!

​ 今天推荐5款十分小众的软件&#xff0c;知道的人不多&#xff0c;但是每个都是非常非常好用的&#xff0c;有兴趣的小伙伴可以自行搜索下载。 自定义开始菜单图标——TileIconifier ​ TileIconifier是一款可以让你自定义Windows开始菜单图标的软件&#xff0c;它可以替换…

Lnton羚通云算力平台OpenCV Python颜色空间转换与抠图教程

在 OpenCV Python 中&#xff0c;颜色空间转换和图像抠图是常见的图像处理任务。下面我将为你介绍如何进行颜色空间转换和图像抠图。 颜色空间转换&#xff1a; 在 OpenCV Python 中&#xff0c;可以使用 cv2.cvtColor() 函数将图像从一个颜色空间转换为另一个颜色空间。常用的…