C++重新入门-string容器

news2024/11/19 17:35:18

目录

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.coloradmin.cn/o/1478614.html

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

相关文章

蓝桥杯刷题3

目录: 1. 天干地支 2. 明明的随机数 3. ISBN号码 4. 缩位求和 5. 幸运数字 6. 串的处理 7. 最长递增 8. 灌溉 9. 特殊日期 10. 最大距离 1. 天干地支 import java.util.*;public class Main {public static void main(String[] args) {Scanner scan new Scanner(Sys…

spring boot集成Elasticsearch 7.16.3

环境&#xff1a;Elasticsearch 版本 7.16.3 Elasticsearch for windows下载地址 windows 若依 spring boot版本 2.6.0 pom文件添加 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch<…

Automated Testing for LLMOps 01:使用CircleCI进行持续集成CI

Automated Testing for LLMOps 这是学习https://www.deeplearning.ai/short-courses/automated-testing-llmops/ 这门课的笔记 Learn how LLM-based testing differs from traditional software testing and implement rules-based testing to assess your LLM application. …

Java实战:构建高效预报名管理系统

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

基于transform的scale属性,动态缩放整个页面,实现数据可视化大屏自适应,保持比例不变形,满足不同分辨率的需求

文章目录 一、需求背景&#xff1a;二、需求分析&#xff1a;三、选择方案&#xff1a;四、实现代码&#xff1a;五、效果预览&#xff1a;六、封装组件&#xff1a; 一、需求背景&#xff1a; 数据可视化大屏是一种将数据、信息和可视化效果集中展示在一块或多块大屏幕上的技…

GL绘制自定义线条4_使用OpenGL ES实现钢笔效果

在以前的文章里http://t.csdnimg.cn/TgCtl&#xff0c;我简述了如何使用OpenGL ES实现光滑的粗线条的绘制效果&#xff0c;在闲暇时间我把它再进一步进化&#xff0c;实现了端点长度按照压感大小实现伸缩的逻辑&#xff0c;从而实现了如下的笔锋效果&#xff1a; 书写过程中的效…

MCBPS配置成SPI

MCBPS配置成SPI 典型的SPI接口 McBSP作为SPI主机 以McBSP为主的SPI接口如图所示。当McBSP被配置为主控器时,发送输出信号(DX)被用作SPI协议的SPISIMO信号,并且接收输入信号(DR)被用作SPISOMI信号。 表列出了将McBSP配置为主控器所需的寄存器位值。下表是有关配置要求…

动环监控是什么?为什么说它是3d可视化机房的眼睛?

在信息化时代的背景下&#xff0c;数据中心机房的重要性日益凸显&#xff0c;传统的人工管理模式显然已经无法应对持续增长的机房数量和规模、日益复杂的网络、频繁更新迭代的资产硬件......搭建3d可视化机房成为了许多企事业单位的共同选择。想要搭建3d可视化机房&#xff0c;…

iOS中卡顿产生的主要原因及优化思路

卡顿本质上是一个UI体验上的问题&#xff0c;而UI的渲染及显示&#xff0c;主要涉及CPU和GPU两个层面。若 CPUGPU渲染耗时超过16.7ms&#xff0c;就会在屏幕vsync信号到来时无法更新屏幕内容&#xff0c;进而导致卡顿。 iOS中UI渲染主要包含Layout->Draw->Prepare->Co…

在原有项目进行业务逻辑开发:同一用户短时间不得提交多次申请,以及更新主表时数据刷新掉了角色权限以及密码重置的问题,详细思路及代码

开发背景&#xff1a; 用户提交表单后&#xff0c;插入到对应数据库表的字段中去&#xff0c;因需要保存是哪一个用户提交的&#xff0c;所以需要拿到主表的user_id&#xff0c;更新功能为记录提交时间&#xff0c;短时间不得再次提交 在对一个已有角色权限分配&#xff0c;登录…

蓝牙耳机和笔记本电脑配对连接上了,播放设备里没有显示蓝牙耳机这个设备,选不了输出设备

环境&#xff1a; WIN10 杂牌蓝牙耳机6s 问题描述&#xff1a; 蓝牙耳机和笔记本电脑配对连接上了&#xff0c;播放设备里没有显示蓝牙耳机这个设备&#xff0c;选不了输出设备 解决方案&#xff1a; 1.打开设备和打印机&#xff0c;找到这个设备 2.选中这个设备&#…

【iOS ARKit】协作 Session 实例

协作 Session 使用注意事项 协作 Session 是在 ARWorldMap 基础上发展起来的技术&#xff0c;ARWorldMap 包含了一系列的地标、ARAnchor 及在观察这些地标和 ARAnchor 时摄像机的视场&#xff08;View&#xff09;。如果用户在某一个位置新创建了一个 ARAnchor&#xff0c;这时…

C++之善用const修饰成员函数

C之善用const修饰成员函数 文章目录 C之善用const修饰成员函数前言1. 约束函数对成员变量的修改2. 允许 const 对象调用3. 在重载函数中提供重载决策总结 前言 ​ 在C编程中&#xff0c;使用const修饰成员函数是一种非常重要的技术手段&#xff0c;它能够提高代码的可维护性、…

基于Python微博舆情数据爬虫可视化分析系统+可视化+情感分析+爬虫+机器学习(完整系统源码+数据库+详细文档)

文章目录 基于Python微博舆情数据爬虫可视化分析系统可视化情感分析爬虫机器学习&#xff08;完整系统源码数据库详细文档&#xff09;源码资料获取在文章末尾1、项目介绍 Pycharm介绍Python语言Echarts简介Navicat Premium 15简介MySQL简介Flask简介 2、项目界面UI详情源码资料…

事物管理(黑马学习笔记)

事物回顾 在数据库阶段我们已学习过事务了&#xff0c;我们讲到&#xff1a; 事物是一组操作的集合&#xff0c;它是一个不可分割的工作单位。事务会把所有的操作作为一个整体&#xff0c;一起向数据库提交或者是撤销操作请求。所以这组操作要么同时成功&#xff0c;要么同时…

Windows PowerShell 命令行历史记录补全

Windows 命令行历史记录补全 使用 powershell 安装PSReadLine 2.1.0 Install-Module PSReadLine -RequiredVersion 2.1.0检查是否存在配置文件 Test-path $profile # 为 false 则执行命令创建 New-item –type file –force $profile编辑配置文件 notepad $profile# 输入如下…

springboot 实现本地文件存储

springboot 实现本地文件存储 实现过程 上传文件保存文件&#xff08;本地磁盘&#xff09;返回文件HTTP访问服务器路径给前端&#xff0c;进行效果展示 存储 服务端接收上传的目的是提供文件的访问服务&#xff0c;对于SpringBoot而言&#xff0c;其对静态资源访问提供了很…

Python程序的流程

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 年轻是我们唯一拥有权利去编制梦想的时…

VDP (vSphere Data Protection)vsphere备份组件

一 概述 传统的备份&#xff1a;在需要备份的主机上安装备份代理&#xff0c;通过网络连接备份服务器对备份代理发出指令从而将备份数据传输到备份服务器所连接的存储中 不足&#xff1a; 每个虚拟机使用过多的物理资源&#xff08;备份很占资源&#xff09;备份过程中&#…

谷歌SEO推广提高网站点击率的10个秘籍-华媒舍

在当今数字化时代&#xff0c;拥有一个高点击率的网站对于企业和个人而言至关重要。通过谷歌SEO推广&#xff0c;可以帮助网站吸引更多的流量&#xff0c;并在搜索引擎结果页面&#xff08;SERP&#xff09;中获得更好的排名。本文将介绍10个谷歌SEO推广的秘籍&#xff0c;帮助…