C++中string类常用函数的用法介绍

news2024/10/2 22:30:48

在C++中,string是一个功能强大的类,用于处理和操作文本数据。它属于C++标准库中的字符串库部分,专门用于处理字符串。与传统的C风格字符串相比,它提供了动态内存管理、类型安全和丰富的操作方法。

目录

一、构造和初始化

二、获取字符串内容

三、查找字符串位置

 四、修改字符串

    1. 删除

    2.插入  

    3.连接

    4.替换

五、字符串长度和大小


一、构造和初始化

  • string s:使用默认构造函数创建一个空字符串。
  • string s(const char* s):用C风格的字符串构造。
  • string s(size_t count, char ch):从给定数量的重复字符构造。
  • 复制构造
  • string s(const string& other):从另一个字符串的子串构造
#include <iostream>
#include <string>
using namespace std;

int main() {
    string s1;                  // 默认构造,创建空字符串
    string s2("Hello");         // 从C风格字符串构造
    string s2_1("Hello",3);     //前三个字符
    string s2_2("Hello", 2, 3); //从第三个开始,长度为三
    string s3(10, 'x');         // 从10个字符'x'构造
    string s4 = s2;             // 将s2复制给s4
    string s5(s2, 3);           //从s2的第四个字符到最后
    string s5_1(s2, 2, 2);        从s2的第三个字符开始,长度为2
    
    cout << "s1: " << s1 << endl;
    cout << "s2: " << s2 << endl;
    cout << "s2_1: " << s2_1 << endl; 
    cout << "s2_2: " << s2_2 << endl;
    cout << "s3: " << s3 << endl;
    cout << "s4: " << s4 << endl;
    cout << "s5: " << s5 << endl;
    cout << "s5_1: " << s5_1 << endl;
    return 0;
}

 

 

 


二、获取字符串内容

  • 通过下标操作符访问
  • substr(size_t pos = 0, size_t len = npos):返回从 pos 开始的、长度为 len 的子字符串
#include <iostream>
#include <string>
using namespace std;

int main() {
    string s("Hello World");
    char c = s[0];                // 'H'
    string s1 = s.substr(6,5);      //获取从第7个开始,长度为5的字符串

    cout << "c: " << c << endl;
    cout << "s1: " << s1 << endl;
    
    return 0;
}

 

 


 

三、查找字符串位置

  • find(const string& str, size_t pos = 0):查找子字符串 str,从位置 pos 开始搜索
  • rfind(const string& str, size_t pos = npos):从字符串末尾开始,反向查找子字符串 str
#include <iostream>
#include <string>
using namespace std;

int main() {
    string s("Hello World");
    int pos1 = s.find("World");     // 返回子字符串"World"的起始位置
    int pos2_1 = s.rfind("World"); //结尾开始反向查找
    int pos2_2 = s.rfind("World", 9);   //第10个开始,反向查找

    cout << "pos1: " << pos1 << endl;
    cout << "pos2_1: " << pos2_1 << endl;
    cout << "pos2_2: " << pos2_2 << endl;
    return 0;
}

 

 


 

 四、修改字符串

    1. 删除

  • erase(size_t index, size_t count):删除从 index 开始的 count 个字符。

     2.插入  

  • insert(size_t index, const string& str):在 index 位置插入字符串 str

  3.连接

  • append(const string& str):在字符串末尾拼接上 str
  • 使用++=运算符连接字符串

     4.替换

  • replace(size_t pos, size_t len, const string& str):替换从 pos 开始的 len 个字符为 str

#include <iostream>
#include <string>
using namespace std;

int main() {
    string s("Hello World");
    cout << "s: " << s << endl;

    s.erase(6, 5);                // 删除从位置6开始的5个字符
    cout << "s: " << s << endl;

    s.insert(6, "there");         // 在位置6插入"there"
    cout << "s: " << s << endl;


    s.append("!");                // 在字符串末尾追加"!"
    cout << "s: " << s << endl;

    s += s;                       //追加s
    cout << "s: " << s << endl;

    s.replace(6, 5, "place");      // 替换从位置6开始的5个字符为"place"
    cout << "s: " << s << endl;


    return 0;
}


五、字符串长度和大小

  • size()获取字符串的长度
  • length()获取字符串的长度
  • empty():检查字符串是否为空,如果为空,返回 true
#include <iostream>
#include <string>
using namespace std;

int main() {
    string str = "Hello World";
    cout << "Length1: " << str.size() << endl; 
    cout << "Length2: " << str.length() << endl;
    if (!str.empty()) {
        cout << "The string is empty." << endl;
    }

    return 0;
}

 


感谢阅读,欢迎大家指正错误。

创作不易,如果我的文章对你有帮助,请点赞收藏关注,您的支持是我前进的最大动力。

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

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

相关文章

算法训练,项目

一.木材加工 题解&#xff1a; 二分答案&#xff0c;左边0&#xff0c;右边可以为最长的木头&#xff0c;但我直接赋值了一个很大的值&#xff0c;进行二分&#xff0c;随后写个check;内部遍历木头截取为mid木块的个数&#xff0c;要是>k&#xff0c;满足要求&#xff0c;还…

【时时三省】(C语言基础)一维数组

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ——csdn时时三省 数组 数组就是一组数 数组的官方定义是一组相同类型元素的集合 一堆数组的创建和初始化 求组的创建 数组是一组相同类型元素的集合。数组的创建当时是: type&#xff3f;t arr&#x…

【JavaEE】定时器

目录 前言 什么是定时器 如何使用java中的定时器 实现计时器 实现MyTimeTask类 Time类中存储任务的数据结构 实现Timer中的schedule方法 实现MyTimer中的构造方法 处理构造方法中出现的线程安全问题 完整代码 考虑在限时等待wait中能否用sleep替换 能否用PriorityBlo…

Linux网络——深入理解 epoll

目录 一、epoll 模型 1.1 前导知识 1.1.1 宏 offsetof 1.1.2 手动计算 1.2 epoll 模型 二、 epoll 工作模式 2.1 水平触发 特点&#xff1a; 2.2 边缘触发 特点&#xff1a; 边缘触发模式中的循环读取 结合非阻塞模式的优势 一、epoll 模型 经过了之前的学习&#…

什么是容器查询?分享 1 段优质 CSS 代码片段!

本内容首发于工粽号&#xff1a;程序员大澈&#xff0c;每日分享一段优质代码片段&#xff0c;欢迎关注和投稿&#xff01; 大家好&#xff0c;我是大澈&#xff01; 本文约 700 字&#xff0c;整篇阅读约需 1 分钟。 今天分享一段优质 CSS 代码片段&#xff0c;使用容器查询…

【算法设计题】实现以字符串形式输入的简单表达式求值,第2题(C/C++)

目录 第2题 实现以字符串形式输入的简单表达式求值 得分点&#xff08;必背&#xff09; 题解 1. 初始化和变量定义 2. 获取第一个数字并存入队列 3. 遍历表达式字符串&#xff0c;处理运算符和数字 4. 初始化 count 并处理加减法运算 代码详解 &#x1f308; 嗨&#xf…

你还在为PDF文件烦恼吗?试试这四款合并工具吧!

每天应对工作都是一个头两个大的&#xff0c;其中pdf的文件问题就是恼人的工作量之一了&#xff0c;这几年的工作经历下来也找了各种可以帮助解决PDF文件问题的工具&#xff0c;好在使用了一些助力我高效工作的软件&#xff0c;今天针对其中遇到的解决pdf合并问题的四款宝藏工具…

当Vercel的域名验证规则碰上JPDirect这种不配合的同学把我的脑袋擦出了火星子

文章目录 前言问题简单说明Vercel主要功能和特点 JPDirectNameServers解决方案 总结 前言 处理域名转移这件事已经过去好几天&#xff0c;终于抽出点时间来总结一下&#xff0c;解决这件事大概花了2周多时间&#xff0c;因为时差的原因导致沟通缓慢&#xff0c;今天准备长话短…

【leetcode】平衡二叉树、对称二叉树、二叉树的层序遍历(广度优先遍历)(详解)

Hi~&#xff01;这里是奋斗的明志&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f331;&#x1f331;个人主页&#xff1a;奋斗的明志 &#x1f331;&#x1f331;所属专栏&#xff1a;数据结构、LeetCode专栏 &#x1f4da;本系…

Zookeeper未授权访问漏洞

Zookeeper是分布式协同管理工具&#xff0c;常用来管理系统配置信息&#xff0c;提供分布式协同服务。Zookeeper的默认开放端口是2181。Zookeeper安装部署之后默认情况下不需要任何身份验证&#xff0c;造成攻击者可以远程利用Zookeeper&#xff0c;通过服务器收集敏感信息或者…

通信原理实验——PCM编译码

PCM编译码 实验目的 理解PCM编译码原理及PCM编译码性能熟悉PCM编译码专用集成芯片的功能和使用方法及各种时钟关系熟悉语音数字化技术的主要指标及测量方法 主要仪器设备及软件 硬件&#xff1a;多功能实验箱、示波器、导线 软件&#xff1a;无 实验原理 1. 抽样信号的量…

锅总浅析SRE

SRE简介 SRE&#xff08;Site Reliability Engineering&#xff0c;站点可靠性工程&#xff09;是由Google开发的一种运维理念和实践方法&#xff0c;其核心思想是用软件工程的方式来管理和运维系统&#xff0c;以提高系统的可靠性、效率和可扩展性。 SRE的核心理念 自动化&…

【Slf4j】项目中使用 slf4j 的好处

前言 背景 项目依赖了三方包&#xff0c;三方包有日志打印的代码。需要将三方包的日志打出来。问题 是怎么做到项目的日志格式和依赖中的日志格式保持一致的&#xff1f;结论 查阅资料后&#xff0c;发现是 slf4j 帮忙做了桥接。这里做下记录。 实验 starter 依赖 log4j主项…

【全网最全】2024年第五届“华数杯”全国大学生数学建模竞赛完整思路解析+代码+论文

我是Tina表姐&#xff0c;毕业于中国人民大学&#xff0c;对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在&#xff0c;我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合…

常见的MySQL数据库面试题

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 总结一下mysql中常…

【最新】精选8家优秀大学生AI论文写作网站

在当前的学术环境中&#xff0c;AI论文写作平台为大学生提供了极大的便利和高效性。以下是8家优秀的AI论文写作网站推荐&#xff1a; 一、千笔-AIPassPaPer 千笔-AIPassPaPer是一款AI原创论文写作平台&#xff0c;能够在10分钟内产出3万字的内容&#xff0c;并提供真实网络数据…

广州城市信息模型(CIM)白皮书学习

CIM平台定义 以建筑信息模型(BIM)、地理信息系统(GIS)、物联网(IoT)等技术为基础&#xff0c;整合城市地上地下、室内室外、历史现状未来多维多尺度信息模型数据和城市感知数据&#xff0c;构建起三维数字空间的城市信息有机综合体。 广州CIM平台建设历程 2019 年 6 月住房和…

关于手机中的红外遥控

在手机电路中&#xff0c;有这么不起眼的一部分&#xff0c;虽看似简单&#xff0c;但是却给我们的生活在一定程度上带来了极大的便捷-红外遥控部分。 其置于手机顶部&#xff0c;并在壳体处挖开一个小孔&#xff0c;用于红外信号对外界的传递。如果你感兴趣的话&#xff0c;不…

【时时三省】unity test 测试框架 使用 code blocks 移植(核心文件:unity.c)

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 目录 1&#xff0c;使用 Code::Blocks 17.12 创建工程 2&#xff0c;移植文件至该工程下&#xff1a; 移入的文件为: 被移入的文件介绍&#xff1a; 更改代码&#xff1a; 向工程添加文…

[数据集][目标检测]生产线上金属罐易拉罐正反面检测数据集VOC+YOLO格式2715张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2715 标注数量(xml文件个数)&#xff1a;2715 标注数量(txt文件个数)&#xff1a;2715 标注…