【C++】STL——string类对象的修改操作、string类对象修改函数的介绍和使用、push_back、append、operator+

news2024/9/25 23:18:29

文章目录

  • 1.string类对象的修改操作
    • (1)push_back(尾插单个字符)
    • (2)append(尾插字符串)
    • (3)operator+(尾插字符串str)
    • (4)c_str(返回C格式字符串)
    • (5)find + npos(返回所找字串开始字符c位置)
    • (6)rfind(返回所找字符c位置)
    • (7)substr(截取字符串返回)

1.string类对象的修改操作

  在C++中,std::string类提供了多种方法来对字符串进行修改操作。以下是一些常用的字符串修改操作:string类详细介绍

在这里插入图片描述

在这里插入图片描述

(1)push_back(尾插单个字符)

  常用的几个:

函数名称功能说明
push_back在字符串后尾插字符c
append在字符串后追加一个字符串
operator+=在字符串后追加字符串str
c_str返回C格式字符串
find + npos从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置
rfind从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置
substr在str中从pos位置开始,截取n个字符,然后将其返回

  在C++中,push_back()是用于向字符串的末尾添加字符的函数。它仅适用于std::string类的对象。

  push_back()函数在向字符串中添加一个字符时,会将该字符追加到字符串的结尾处。你可以使用字符常量或者变量作为参数来调用push_back()函数,以向字符串末尾添加字符。

  下面是一个使用push_back()函数的示例:

#include <iostream>
#include <string>

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

    str.push_back(' ');
    str.push_back('W');
    str.push_back('o');
    str.push_back('r');
    str.push_back('l');
    str.push_back('d');

    std::cout << str << std::endl;

    return 0;
}

//Hello World

(2)append(尾插字符串)

  在C++中,append()函数用于将字符串或字符序列追加到现有字符串的末尾。下面是一个使用append()函数的示例:

   append()函数可以接受两种参数:字符串和字符序列。 你可以直接提供字符串常量或使用字符指针来追加字符序列。它将指定的字符串或字符序列连接到原始字符串的末尾,修改原始字符串并返回新的字符串。

#include <iostream>
#include <string>

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

    // 追加字符串
    str.append(" World");
    std::cout << str << std::endl;

    // 追加字符序列
    const char* seq = "! How are you?";
    str.append(seq);
    std::cout << str << std::endl;

    return 0;
}

//Hello World
//Hello World! How are you?

append()函数和push_back()函数的区别:

  append()函数用于追加字符串或字符序列,而push_back()函数用于将单个字符追加到字符串的末尾。

#include <iostream>
#include <string>

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

    // 使用 append() 函数进行字符串追加
    str1.append(" ");
    str1.append(str2);
    std::cout << str1 << std::endl;

    std::string str3 = "Hello";

    // 使用 push_back() 函数进行字符追加
    str3.push_back(' ');
    str3.push_back('W');
    std::cout << str3 << std::endl;

    return 0;
}

//Hello World
//Hello W

(3)operator+(尾插字符串str)

  在C++中,operator+函数用于将两个字符串进行连接操作,返回一个新的字符串。它是通过重载加号运算符来实现的。

  通过使用operator+函数,我们可以直接使用加号运算符将两个字符串连接在一起,形成一个新的字符串。这种方法更简洁,不需要调用额外的成员函数进行连接操作。

 下面是一个使用operator+函数的示例:

#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;
}

//Hello World

  operator+函数和append()函数虽有区别,但是用法基本相似了

   在string尾部追加字符时,s.push_back(c ) / s.append(1, c) / s += 'c’三种的实现方式差不多,一般情况下string类的+=操作用的比较多,+=操作不仅可以连接单个字符,还可以连接字符串。

#include <iostream>
#include <string>

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

    // 使用 operator+ 函数进行字符串连接
    std::string result = str1 + str2;
    std::cout << result << std::endl;

    std::string str3 = "Hello";

    // 使用 append() 函数进行字符串追加
    str3.append(str2);
    std::cout << str3 << std::endl;

    return 0;
}

//Hello World
//Hello World

(4)c_str(返回C格式字符串)

   在C++中,c_str()函数用于将std::string对象转换为C风格的字符串类型表示。 即以null终止的字符数组。

   c_str()函数的主要作用是在需要使用C风格字符串的函数或代码中,将std::string对象转换为C风格字符串。由于C风格字符串以null终止,所以必须使用const char*类型的变量来接收转换后的结果。

   需要注意的是,c_str()函数返回的C风格字符串是一个指向std::string对象内部字符数组的指针。因此,如果在后续修改std::string对象的过程中,可能会导致指针指向无效的内存。

   综上所述,通过使用c_str()函数,我们可以将std::string对象转换为C风格字符串,以便在需要的地方使用。

   以下是一个使用c_str()函数的示例:

#include <iostream>
#include <string>

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

    const char* cstr = str.c_str();

    std::cout << cstr << std::endl;

    return 0;
}

//Hello, World!

(5)find + npos(返回所找字串开始字符c位置)

  在C++中,find()函数用于在字符串中查找指定的子串,并返回第一个匹配的位置。npos是std::string类中的一个静态常量,表示无效的或不存在的位置。通过结合使用find()函数和npos常量,我们可以判断子串是否存在于目标字符串中。

  通过使用find()函数和npos常量,我们可以方便地判断子串是否存在于目标字符串中。find()函数返回的位置值可以与npos进行比较,如果相等则表明没有找到子串。这种方式是处理字符串搜索的常用方式。

  需要注意的是,npos的值在不同的编译环境中可能有所不同,但它始终是表示无效或不存在的位置。具体而言,npos的值通常是std::string::npos,表示最大可能的std::string大小。

  以下是一个使用find()函数和npos常量的示例:

#include <iostream>
#include <string>

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

    std::size_t found = str.find("World");

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

    return 0;
}

//Substring 'World' found at position: 7

(6)rfind(返回所找字符c位置)

  在C++中,rfind()函数用于在字符串中从末尾向前查找指定的子串,并返回最后一个匹配的位置。它类似于find()函数,但从反向开始搜索。

  通过使用rfind()函数,我们可以从目标字符串的末尾向前搜索子串。这可以用于查找最后一个匹配的位置,或者在处理需要从后向前进行搜索的特定问题时使用。

  需要注意的是,与find()函数类似,在不同的编译环境中,npos的值也可能有所不同,但它仍然表示无效或不存在的位置。具体而言,npos的值通常是std::string::npos,表示最大可能的std::string大小。

  以下是一个使用rfind()函数的示例:

#include <iostream>
#include <string>

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

    std::size_t found = str.rfind("Hello");

    if (found != std::string::npos) 
    {
        std::cout << "Last occurence of substring 'Hello' found at position: " << found << std::endl;
    } 
    else 
    {
        std::cout << "Substring not found" << std::endl;
    }

    return 0;
}

//Last occurence of substring 'Hello' found at position: 13

(7)substr(截取字符串返回)

  在C++中,substr()函数用于提取字符串中的子串。它接受两个参数,第一个参数是提取子串的起始位置,第二个参数是提取子串的长度。

  通过使用substr()函数,我们可以从字符串中提取需要的子串,并将其存储在一个新的字符串对象中。

  需要注意的是,substr()函数的第一个参数指定的是起始位置,而不是子串的结束位置。例如,在示例中,起始位置7是指从索引为7的字符开始提取。第二个参数指定的是子串的长度,而不是结束位置。在示例中,长度为5表示从起始位置开始,提取5个字符作为子串。

  如果只提供一个参数给substr()函数,则会从指定位置一直提取到字符串的末尾。

  综上所述,通过使用substr()函数,我们可以方便地从字符串中提取指定位置和长度的子串。

  以下是一个使用substr()函数的示例:

#include <iostream>
#include <string>

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

    std::string substr = str.substr(7, 5);

    std::cout << "Substring: " << substr << std::endl;

    return 0;
}

//Substring: World

这些就是C++中string类对象的修改和操作的简单介绍了😉
如有错误❌望指正,最后祝大家学习进步✊天天开心✨🎉

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

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

相关文章

linux基础 - SHELL1

目录 一、基础 1.test测试语句 2.逻辑运算 3.类型判断 4.数值判断 5.字符串比较 6.计算表达式 二、shell数组 1.单行定义 2.多行定义 3.单元素定义 4.查看元素 5.基于内容找索引 6.增删改 三、shell高级 1.重定向 2.其他符号 3.信息符号 4.if语句 5.else …

unity --- DoTween插件安装与使用

目录 一.简介 1.1 插件下载 1.2 官方文档 二.导入和设置 三.示例代码 1 循环动画&#xff1a;SetLoops(-1 , loopType ) 2. 动画循环次数&#xff1a;SetLoops( count ) 3. 动画事件监听与回调&#xff1a;OnStart \ OnComplete 4. 动画延迟回调&#xff1a;SetDelay …

Java8特性:函数式接口与Stream流

1、 函数式接口 &#xff08;1&#xff09;四大函数式接口 &#xff08;2&#xff09;代码01 //void accept(T t);消费型接口&#xff0c;有参数&#xff0c;无返回 Consumer<String> consumer t->{System.out.println(t); }; consumer.accept("a"); //…

DAY42:动态规划(二)斐波那契数列+爬楼梯+最小花费爬楼梯

文章目录 509.斐波那契数列思路&#xff1a;动规五步确定dp数组和数组下标含义递推公式DP数组初始化遍历顺序打印DP数组 完整版debug测试 空间复杂度优化版优化思路 70.爬楼梯思路DP数组的含义以及下标含义递推公式DP数组初始化遍历顺序打印DP数组 完整版debug测试 空间复杂度优…

10.24UEC++、事件

1. 类内部声明事件类型&#xff1a; 生成actor 绑定到事件上 实现&#xff1a; 移除&#xff1a;

使用docker安装redis并使用redis deskTop manager连接

使用docker安装redis 提前准备环境 linux、 docker环境 # 使用命令查看docker环境是否正常docker images(任何一个docker命令就可以&#xff0c;不一定必须这个) 下载redis镜像 # 使用命令下载镜像文件docker pull redis 确认镜像 # 使用命令查看镜像docker images使用redis d…

功能测试的测试流程是什么样的?

概述 本流程是描述软件功能自动化测试过程中的步骤、内容与方法&#xff0c;明确各阶段的职责、活动与产出物。 流程活动图 活动说明 测试计划&#xff08;可选&#xff09; 与以前的测试计划过程一致&#xff0c;只是在原来的测试计划中&#xff0c;添加对项目实施自动化测试…

Qt窗体全屏与复原,子窗体全屏与复原

QT QWidget窗体全屏时&#xff0c;全屏与最大化的区别时最大化有标题框全屏没有框&#xff0c;可以使用自带的函数&#xff1a; showFullScreen(); 复原时也有专门的函数&#xff1a; showNormal(); 如果我想在点击最大化按钮时&#xff0c;让窗体全屏。这个时候最好有线程…

学好工作汇报,你离升职加薪也就不远了

在职场中&#xff0c;工作汇报是展示你的价值和成果的重要环节。无论你是想要升职还是加薪&#xff0c;一个出色的工作汇报能够给你带来巨大的竞争优势。然而&#xff0c;许多人对于如何进行有效的工作汇报感到困惑。在本文中&#xff0c;我们将向您介绍一些关键技巧和策略&…

路径规划算法:基于骑手优化优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于骑手优化优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于骑手优化优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化…

Linux学习之vim在光标所在处写入内容,保存退出

vim insertTest使用vim打开一个叫做insertTest新文件。 输入命令之后&#xff0c;按下Enter&#xff08;回车键&#xff09;&#xff0c;就可以进入下边的操作页面。 按i在当前光标位置处&#xff0c;就可以插入内容了。 接下来写入内容跟记事本里边是差不多的。 按一下…

【Spring】Spring基础知识 Java开发必看

&#x1f680;欢迎来到本文&#x1f680; &#x1f349;个人简介&#xff1a;陈童学哦&#xff0c;目前专攻C/C、Python、Java等方向&#xff0c;一个正在慢慢前行的普通人。 &#x1f3c0;系列专栏&#xff1a;陈童学的日记 &#x1f4a1;其他专栏&#xff1a;CSTL、蓝桥杯&am…

vue拼接html中onclick的触发方式,模版字符串拼接点击事件在vue项目中不生效问题

模版字符串拼接点击事件在vue项目中不生效问题 下面的点击事件没有任何效果&#xff0c;但是如果换成onclick绑定事件则会提示没有该方法。主要原因是&#xff1a; 模版字符串中拼接的html片段中的方法调不到vue中this.methods里的东西&#xff0c;因为methods里的代码是编译…

物体识别(香蕉)

✨✨✨ 感谢优秀的你打开了小白的文章 “希望在看文章的你今天又进步了一点点&#xff0c;生活更加美好&#xff01;”&#x1f308;&#x1f308;&#x1f308; 目录 1.数据集下载 2.数据集导入 3.结果 1.数据集下载 包含所有图像和CSV标签文件的香蕉检测数据集可以直接从互…

day1-二分查找

二分查找 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target 9 输出: 4 解…

单片机基于stm32单片机的数字温度计设计_kaic

摘 要 古往今来,陶瓷在我们的生活中一直都是不可或缺的物品,而随着当今社会经济的快速发展,人们对于这些高档陶瓷产品的使用性能和产品质量上的要求也愈加严格。那么在陶瓷品的生产过程中,想要提高陶瓷品的品质和合格率,能够随时监测温度的温度计是必不可少的。 本课题的研究是…

什么是IP地址定位技术

IP地址定位是一种技术手段&#xff0c;可以通过获取设备的IP地址精确定位设备的地理位置。它在现代社会的许多方面都有广泛的应用&#xff0c;包括网络安全、广告投放市场调研等。 在互联网时代&#xff0c;人们越来越依赖于网络而IP地址作为网络连接的基石扮演着重要的角色。…

什么软件支持快速批量处理大量视频素材呢

在视频剪辑的过程中&#xff0c;有时候为了满足视频时长的需求&#xff0c;或者为了实现视频与音频的同步操作&#xff0c;我们可能需要对视频的播放速度进行调整。如果需要处理大量的视频文件&#xff0c;传统的手动一个个调整的方法就显得有点落后了&#xff0c;今天小编要与…

JDBC事务特性

1、 事务的四种特性&#xff08;ACID&#xff09; 原子性&#xff08;Atomicity&#xff09;&#xff1a;原子性是指事务是一个不可分割的执行单元或者叫工作单位&#xff0c;事务中的操作&#xff0c;要么都发生&#xff0c;要么都不发生。 一致性&#xff08;Consistency&am…

centos7.9 安装redis5.0.7记录

参考自己之前写的安装5.0.3 centos7安装redis5.0.3详细步骤_lanren312的博客-CSDN博客 一开始大意了&#xff0c;没有安装gcc&#xff0c;直接就make [rootlocalhost redis-5.0.7]# make cd src && make all make[1]: Entering directory /opt/redis-5.0.7/srcLINK re…