C++重新入门-string容器

目录

1.包含头文件

 2.创建字符串

3.获取字符串长度

4.字符串拼接

5.字符串比较

相等性比较

大小比较

使用比较函数

6.访问字符串

7.查找子串

8.字符串修改

替换子串

插入字符或子串

删除字符或子串

9.提取子串

10.总结


当谈到C++中的字符串时,std::string 容器是一个非常方便且强大的工具。它是C++标准库中的一部分,提供了许多操作字符串的方法。下面是一个简单的解释和示例:

1.包含头文件

在使用 std::string 之前,需要包含 <string> 头文件。

#include <string>

 2.创建字符串

你可以通过多种方式创建一个字符串对象。

std::string str1;                 // 空字符串
std::string str2 = "Hello";       // 使用字符串常量初始化
std::string str3("World");        // 使用构造函数初始化
std::string str4(5, 'X');         // 使用重复字符初始化,产生 "XXXXX"

3.获取字符串长度

你可以使用 size() 方法获取字符串的长度。

std::string str = "Hello";
int length = str.size();        // length 现在为 5

4.字符串拼接

使用 + 操作符可以将两个字符串拼接起来。

std::string str1 = "Hello";
std::string str2 = "World";
std::string combined = str1 + " " + str2;    // combined 现在为 "Hello World"

5.字符串比较

在 C++ 中,字符串比较是通过比较两个字符串中的字符来确定它们之间的大小关系。字符串比较通常涉及以下几种情况:

  1. 相等性比较:判断两个字符串是否完全相等。
  2. 大小比较:确定两个字符串的大小关系,即确定一个字符串是位于另一个字符串之前、之后还是相等。

在 C++ 中,字符串比较通常使用 ==!=<<=>>= 这些操作符来完成。这些操作符都是针对字符串的字符按顺序进行比较的。字符串比较是按字典序进行的,即从左到右依次比较字符,直到找到不同的字符或者一个字符串结束。

下面是字符串比较的一些示例:

相等性比较

std::string str1 = "apple";
std::string str2 = "banana";

if (str1 == str2) {
    std::cout << "Strings are equal" << std::endl;
} else {
    std::cout << "Strings are not equal" << std::endl;
}

大小比较

std::string str1 = "apple";
std::string str2 = "banana";

if (str1 < str2) {
    std::cout << "str1 comes before str2" << std::endl;
} else if (str1 > str2) {
    std::cout << "str1 comes after str2" << std::endl;
} else {
    std::cout << "str1 and str2 are equal" << std::endl;
}

使用比较函数

除了操作符外,你也可以使用 compare() 成员函数来进行字符串比较。这个函数返回一个整数,表示两个字符串的大小关系。

std::string str1 = "apple";
std::string str2 = "banana";

int result = str1.compare(str2);

if (result == 0) {
    std::cout << "Strings are equal" << std::endl;
} else if (result < 0) {
    std::cout << "str1 comes before str2" << std::endl;
} else {
    std::cout << "str1 comes after str2" << std::endl;
}

需要注意的是,compare() 函数返回值的含义是:

  • 如果 result 为 0,则表示两个字符串相等。
  • 如果 result 小于 0,则表示 str1 在字典序上位于 str2 之前。
  • 如果 result 大于 0,则表示 str1 在字典序上位于 str2 之后。

这些是在 C++ 中进行字符串比较的基本方法。你可以根据实际需要选择适合的方法来比较字符串。

6.访问字符串

使用下标操作符 []:你可以像访问数组一样使用下标来访问字符串中的字符。字符串的第一个字符索引是0。

std::string str = "Hello";
char ch = str[0];  // 访问第一个字符 'H'

使用 at() 成员函数at() 函数提供了与下标操作符类似的功能,但它提供了越界检查,并在越界时引发 std::out_of_range 异常。

std::string str = "Hello";
char ch = str.at(1);  // 访问第二个字符 'e'

7.查找子串

在 C++ 中,你可以使用 find() 方法来查找一个子串在字符串中的位置。find() 方法返回子串在字符串中第一次出现的位置索引,如果子串不存在,则返回 std::string::npos

以下是使用 find() 方法查找子串的示例:

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello World";

    // 查找子串 "World" 在字符串中的位置
    size_t found = str.find("World");

    if (found != std::string::npos) {
        std::cout << "Substring found at position: " << found << std::endl;
    } else {
        std::cout << "Substring not found" << std::endl;
    }

    return 0;
}

在这个示例中,字符串 "Hello World" 中的子串 "World" 被找到,并且它在字符串中的起始位置是6。如果子串不存在,则 find() 方法返回 std::string::npos,表示子串未找到。

find() 方法还可以接受额外的参数,用于指定搜索的起始位置。例如,你可以从指定的位置开始搜索子串:

size_t found = str.find("World", 7);  // 从索引 7 开始查找子串

这将从字符串中的索引7(包括索引7)开始查找子串 "World"

另外,如果你想反向查找子串,可以使用 rfind() 方法,它会从字符串的末尾开始搜索子串,类似于 find(),但是从字符串的尾部向前搜索。

size_t found = str.rfind("World");  // 从末尾开始查找子串

这就是在 C++ 中查找子串的基本方法。你可以根据实际需求使用这些方法来查找并处理字符串中的子串。

8.字符串修改

替换子串

你可以使用 replace() 方法来替换字符串中的子串。这个方法允许你指定要替换的起始位置和长度,并提供替换的字符串。

#include <iostream>
#include <string>

int main() {
    std::string str = "I like apples";
    
    // 替换 "apples" 为 "oranges"
    str.replace(str.find("apples"), 6, "oranges");

    std::cout << str << std::endl; // 输出:I like oranges

    return 0;
}

插入字符或子串

你可以使用 insert() 方法在字符串的指定位置插入字符或子串。

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello";

    // 在索引 5 处插入子串 " World"
    str.insert(5, " World");

    std::cout << str << std::endl; // 输出:Hello World

    return 0;
}

删除字符或子串

你可以使用 erase() 方法删除字符串中的字符或子串。

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello World";

    // 从索引 6 开始删除 5 个字符
    str.erase(6, 5);

    std::cout << str << std::endl; // 输出:Hello

    return 0;
}

9.提取子串

substr() 方法用于提取字符串中的子串,并返回一个新的字符串。它接受两个参数:起始位置和要提取的子串的长度。如果省略第二个参数,则提取从起始位置到字符串末尾的所有字符。

以下是 substr() 方法的基本用法示例:

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello World";

    // 从索引 6 开始提取子串,直到字符串末尾
    std::string sub1 = str.substr(6);
    std::cout << "Substring 1: " << sub1 << std::endl; // 输出:World

    // 从索引 0 开始提取长度为 5 的子串
    std::string sub2 = str.substr(0, 5);
    std::cout << "Substring 2: " << sub2 << std::endl; // 输出:Hello

    return 0;
}

在这个示例中,str.substr(6) 提取了从索引6开始到字符串末尾的子串,结果是 "World"。而 str.substr(0, 5) 提取了从索引0开始长度为5的子串,结果是 "Hello"

substr() 方法非常有用,可以用于从字符串中提取感兴趣的部分,然后进行进一步处理。

10.总结

// 查找子串
size_t find(const std::string& str, size_t pos = 0) const;

// 返回字符串长度
size_t size() const noexcept;

// 比较字符串
int compare(const std::string& str) const noexcept;

// 访问指定位置的字符
char& at(size_t pos);
const char& at(size_t pos) const;

// 替换子串
void replace(size_t pos, size_t len, const std::string& str);

// 插入子串
void insert(size_t pos, const std::string& str);

// 删除子串
void erase(size_t pos, size_t len);

// 提取子串
std::string substr(size_t pos, size_t len = std::string::npos) const;

 


 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity绘制六边形体

现在steam上面有很多下棋类/经营类的游戏都是用六边形的地形&#xff0c;比较美观而且实用&#xff0c;去年在版本末期我也自己尝试做了一个绘制六边体的demo&#xff0c;一年没接触unity竟然都要忘光了&#xff0c;赶紧在这边记录一下。 想cv代码可以直接拉到代码章节 功能 …

go语言魔法技能go:linkname

我们在看Go语言的源码时&#xff0c;经常会看到一些特别的注释&#xff0c;比如&#xff1a; //go:build //go:linkname //go:nosplit //go:noescape //go:uintptrescapes //go:noinline //go:nowritebarrierrec等等&#xff0c;这些特别的注释其实是Go编译器的指示指令。这里…

基于JAVA的毕业设计分配选题系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 专业档案模块2.2 学生选题模块2.3 教师放题模块2.4 选题审核模块 三、系统展示四、核心代码4.1 查询专业4.2 新增专业4.3 选择课题4.4 取消选择课题4.5 审核课题 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpri…

Go语言必知必会100问题-10 小心类型嵌入导致的问题

小心类型嵌入导致的问题 在定义结构体时&#xff0c;Go语言支持通过类型嵌入的形式定义结构体字段。但是&#xff0c;如果我们没有真正理解类型嵌入的意义&#xff0c;有时可能会导致意想不到的行为。本文将主要分析如何嵌入类型&#xff0c;类型嵌入的作用以及可能出现的问题…

lv20 QT对话框3

1 内置对话框 标准对话框样式 内置对话框基类 QColorDialog, QErrorMessage QFileDialog QFontDialog QInputDialog QMessageBox QProgressDialogQDialog Class帮助文档 示例&#xff1a;各按钮激发对话框实现基类提供的各效果 第一步&#xff1a;实现组件布局&…

Redis 之三:发布订阅(pub/sub)

概念介绍 Redis 发布订阅 (pub/sub) 是一种消息通信模式&#xff0c;它允许客户端之间进行异步的消息传递 Redis 客户端可以订阅任意数量的频道。 模型中的角色 在该模型中&#xff0c;有三种角色&#xff1a; 发布者&#xff08;Publisher&#xff09;&#xff1a;负责发送信…

【Hudi】核心概念

https://www.bilibili.com/video/BV1ue4y1i7na?p17&vd_sourcefa36a95b3c3fa4f32dd400f8cabddeaf 大数据新风口&#xff1a;Hudi数据湖&#xff08;尚硅谷&Apache Hudi联合出品&#xff09; 1 基础概念 1.1 时间轴(TimeLine) 1.2 文件布局(File Layout) 1.3 索引(In…

Unity-PDF分割器(iTextSharp)

PDF分割器 Unity-PDF分割器前言核心思路解决过程一、Unity安装iTextSharp二、运行时计算将要生成文件的大小三、分割核心代码四、使用StandaloneFileBrowser五、其他的一些脚本六、游戏界面主体的构建MainWindowWarningPanel & FinishPanel By-Round Moon Unity-PDF分割器 …

浅谈 Linux 网络编程 socket

文章目录 socket 介绍 socket 介绍 socket 被翻译成 网络套接字&#xff0c;这个名字实在是不好理解&#xff0c;我更愿意称为"插槽"。 忽略 socket 的中文名&#xff0c;先无脑记住两个规则&#xff1a; ① 记住&#xff0c;一个文件描述符(fd) 指向一个 socket&…

同芯.共赢 | 暴雨服务器亮相AMD EPYC合作伙伴峰会

2月29日&#xff0c;AMD EPYC合作伙伴峰会活动在北京成功举行&#xff0c;暴雨作为AMD重要生态合作伙伴应邀参加。作为AMD开年首场活动&#xff0c;此次活动意义非凡&#xff0c;AMD在现场向合作伙伴分享了AMD数据中心全新产品路线、解决方案以及生态建设领域的最新进展。 AMD是…

android开发平台,Java+性能优化+APP开发+NDK+跨平台技术

开头 通常作为一个Android APP开发者&#xff0c;我们并不关心Android的源代码实现&#xff0c;不过随着Android开发者越来越多&#xff0c;企业在筛选Android程序员时越来越看中一个程序员对于Android底层的理解和思考&#xff0c;这里的底层主要就是Android Framewok中各个组…

机器学习专项课程03:Unsupervised Learning, Recommenders, Reinforcement Learning笔记 Week02

Week 02 of Unsupervised Learning, Recommenders, Reinforcement Learning 课程地址&#xff1a; https://www.coursera.org/learn/unsupervised-learning-recommenders-reinforcement-learning 本笔记包含字幕&#xff0c;quiz的答案以及作业的代码&#xff0c;仅供个人学习…

二分查找讲解

关于我为什么要写单独开一篇文章写二分,实际上那么多困难的算法,比如线段树,并查集等等都没有难倒我,我最近却被二分难倒了,而且是两次,两次在赛场上做不出来二分的应用题,于是我决定写一篇二分查找的算法总结.刚接触算法的时候本来是要写一篇的,但后面因为各种原因搁置了,现在…

R语言数学建模(二)—— tidymodels

R语言数学建模&#xff08;二&#xff09;—— tidymodels 文章目录 R语言数学建模&#xff08;二&#xff09;—— tidymodels前言一、示例数据集二、拆分数据集2.1 拆分数据集的常用方法2.2 验证集2.3 多层次数据2.4 其他需考虑问题 三、parsnip用于拟合模型3.1 创建模型3.2 …

腾讯云优惠券领取的三个渠道,先领券再下单!

腾讯云代金券领取渠道有哪些&#xff1f;腾讯云官网可以领取、官方媒体账号可以领取代金券、完成任务可以领取代金券&#xff0c;大家也可以在腾讯云百科蹲守代金券&#xff0c;因为腾讯云代金券领取渠道比较分散&#xff0c;腾讯云百科txybk.com专注汇总优惠代金券领取页面&am…

禁止safari浏览器网页双击缩放功能

普通浏览器 普通浏览器&#xff0c;只需要增加meta标签禁止缩放功能就行了 <meta content"widthdevice-width, initial-scale1.0, maximum-scale1.0, user-scalable0;" name"viewport" /> user-scalableno或0 //禁止双指缩放页面initial-scale1.0…

企业文件图纸加密有哪些?图纸文件加密防泄密软件如何选?

在现在的市场发展中&#xff0c;对于企业的图纸文件安全问题越来越重视&#xff0c;如设计图纸&#xff0c;重要文件等&#xff0c;一旦泄漏就会给企业造成巨大的经济损失。所以对企业管理者来讲&#xff0c;如何才能选择一款好用的适合本企业的图纸文件加密软件是非常重要的&a…

【C++】手把手教你手搓模拟实现string类

前言 string类一直都是C的经典问题&#xff0c;之前的文章已经对string类做了一个基本的介绍&#xff08;string类的基本常用接口&#xff09;&#xff0c;为了更好理解string类的功能&#xff0c;此篇文章将手把手教你带你手搓模拟实现string类&#xff0c;快来一起学习吧&am…

Spring 事务传播机制

事务传播机制&#xff1a;多个事务⽅法存在调⽤关系时, 事务是如何在这些⽅法间进⾏传播的。 ⽐如&#xff1a;有两个⽅法A&#xff0c;B都被 Transactional 修饰,&#xff0c;A⽅法调⽤B⽅法 A⽅法运⾏时, 会开启⼀个事务。当A调⽤B时&#xff0c; B⽅法本⾝也有事务&#xf…

Pod 进阶

目录 资源限制 健康检查 资源限制 当定义 Pod 时可以选择性地为每个容器设定所需要的资源数量。 最常见的可设定资源是 CPU 和内存大小&#xff0c;以及其他类型的资源。 当为 Pod 中的容器指定了 request 资源时&#xff0c;代表容器运行所需的最小资源量&#xff0c;调度器…
最新文章