【C++】C++中查找并替换字符串中的特定单个字符、多个字符、中文字符

目录

一.替换单个字符

方法1:使用循环遍历字符串

方法2:使用 std::replace 算法

二.替换字符串中的中文字符

1.检查字符串中是否包含中文逗号

2.替换字符串中的中文逗号

3.遍历字符串并打印中文逗号

三.替换字符串中的多个字符


一.替换单个字符

在C++中,替换字符串中的某个字符可以通过遍历字符串,检查每个字符,并在发现目标字符时替换它来实现。下面是使用 std::string 类和 std::replace 算法的两种方法:

方法1:使用循环遍历字符串

#include <iostream>
#include <string>void replaceChar(std::string& str, char toReplace, char replacement) {for (char& c : str) {if (c == toReplace) {c = replacement;}}
}int main() {std::string text = "Hello World!";replaceChar(text, 'o', '0'); // 将所有的 'o' 替换为 '0'std::cout << text << std::endl; // 输出 "Hell0 W0rld!"return 0;
}

方法2:使用 std::replace 算法

#include <iostream>
#include <string>
#include <algorithm>void replaceChar(std::string& str, char toReplace, char replacement) {std::replace(str.begin(), str.end(), toReplace, replacement);
}int main() {std::string text = "Hello World!";replaceChar(text, 'l', 'L'); // 将所有的 'l' 替换为 'L'std::cout << text << std::endl; // 输出 "HeLLo WorLd!"return 0;
}

 std::replace 是C++标准库中的一个函数,可以替换字符串中的字符。这个方法不需要编写循环,但需要包含 <algorithm> 头文件。

在这两个示例中, replaceChar 函数接受一个字符串引用和两个字符,分别表示要替换的字符和替换后的字符。函数通过遍历字符串中的每个字符,如果字符匹配 toReplace ,则将其替换为 replacement 。

请注意,如果字符串中没有要替换的字符, std::replace 不会执行任何操作,因此这两个方法在这种情况下都是高效的。如果你需要替换的字符在字符串中不存在,使用 std::replace 的方法会稍微更快一些,因为它内部优化了查找和替换的过程。

二.替换字符串中的中文字符

在C++中, std::string  类型可以存储包括中文逗号在内的任何字符。中文逗号在 Unicode 中的编码是  U+FF0C 。当你使用  std::string  处理中文时,确保你的源文件使用 UTF-8 或其他支持多字节字符的编码。

以下是一些处理  std::string  中中文逗号的示例:

1.检查字符串中是否包含中文逗号

#include <iostream>
#include <string>bool containsChineseComma(const std::string& str) {return str.find(0xFF0C) != std::string::npos; // 0xFF0C 是中文逗号的十六进制表示
}int main() {std::string text = "这是一个包含中文逗号,的字符串。";if (containsChineseComma(text)) {std::cout << "字符串中包含中文逗号。" << std::endl;} else {std::cout << "字符串中不包含中文逗号。" << std::endl;}return 0;
}

2.替换字符串中的中文逗号

#include <iostream>
#include <string>void replaceChineseCommaWithEnglish(std::string& str) {std::string::size_type pos = 0;while ((pos = str.find(0xFF0C, pos)) != std::string::npos) {str.replace(pos, 1, ",");pos += 2; // 移动到替换后的字符之后}
}int main() {std::string text = "这是一个,包含中文逗号,的字符串。";replaceChineseCommaWithEnglish(text);std::cout << "替换后的字符串: " << text << std::endl;return 0;
}

3.遍历字符串并打印中文逗号

#include <iostream>
#include <string>void printChineseCommas(const std::string& str) {for (unsigned char ch : str) {if (ch == 0xFF0C) { // 检查是否是中文逗号std::cout << "找到中文逗号。" << std::endl;}}
}int main() {std::string text = "这里有中文逗号,请注意。";printChineseCommas(text);return 0;
}

请注意,由于中文逗号是一个多字节字符,在处理时确保你的环境支持 UTF-8 编码。在 Windows 平台上,你可能需要设置正确的代码页(例如使用  chcp 65001  命令设置为 UTF-8 编码)以正确显示中文字符。

此外, std::string::find  和  std::string::replace  函数在处理多字节字符时可能会有些复杂,因为它们可能不会正确识别多字节字符的边界。在实际应用中,你可能需要使用专门的库或函数来处理多字节字符串。

三.替换字符串中的多个字符

在C++中,你可以使用  std::string  类的  replace  成员函数来将连续的三个空格替换成一个逗号。以下是一个示例函数,它将遍历字符串查找连续的三个空格,并将它们替换为一个逗号:

#include <iostream>
#include <string>void replaceThreeSpacesWithComma(std::string& str) {size_t pos = 0;while ((pos = str.find(" ", pos)) != std::string::npos) {str.replace(pos, 3, ",");pos += 1; // 移动到逗号之后,避免替换后再次匹配}
}int main() {std::string text = "这是 一些 需要替换的 文本。";replaceThreeSpacesWithComma(text);std::cout << text << std::endl; // 输出: "这是,一些,需要替换的,文本。"return 0;
}


在这个示例中, replaceThreeSpacesWithComma  函数使用  find  函数来查找字符串中连续的三个空格,然后使用  replace  函数将这三个空格替换为一个逗号。替换后, pos  变量增加1,以避免刚刚替换的逗号再次成为匹配的一部分。

请注意,这个函数只替换了连续的三个空格,如果文本中有四个或更多的连续空格,它们仍然需要被替换。如果需要替换任意数量的连续空格,你可以修改函数来递归地调用自身,直到没有连续的三个空格为止。
 

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

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

相关文章

正点原子 通用外设配置模型 GPIO配置步骤 NVIC配置

1. 这个是通用外设驱动模式配置 除了初始化是必须的 其他不是必须的 2. gpio配置步骤 1.使能时钟是相当于开电 2.设置工作模式是配置是输出还是输入 是上拉输入还是下拉输入还是浮空 是高速度还是低速度这些 3 和 4小点就是读写io口的状态了 3. 这个图是正点原子 将GPIO 的时…

mysql中提供的函数

文章目录 1.聚合函数2.字符串函数3.数值函数4.日期函数5.流程函数 MySQL 是一个功能强大的关系型数据库管理系统&#xff0c;其中包含了丰富的内置函数&#xff0c;用于处理各种数据操作和查询。这些函数可以分为多种类型&#xff0c;包括字符串函数、数值函数、日期和时间函数…

Axure设计之轮播图(动态面板+中继器)

轮播图&#xff08;Carousel&#xff09;是一种网页或应用界面中常见的组件&#xff0c;用于展示一系列的图片或内容&#xff0c;通常通过自动播放或用户交互&#xff08;如点击箭头按钮&#xff09;来切换展示不同的内容。轮播图能够吸引用户的注意力&#xff0c;有效展示重要…

SQL Server流量分析

SQL Server流量分析涉及监控和分析SQL Server数据库服务器的网络通信量、操作性能、资源使用和安全性&#xff0c;以确保数据库的高效运行和安全。SQL Server流量分析可以帮助你识别潜在的性能瓶颈、异常行为和安全威胁&#xff0c;从而采取适当的措施进行优化和防护。以下是进…

全能数据分析工具:Tableau Desktop 2019 for Mac 中文激活版

Tableau Desktop 2019 一款专业的全能数据分析工具&#xff0c;可以让用户将海量数据导入并记性汇总&#xff0c;并且支持多种数据类型&#xff0c;比如像是编程常用的键值对、哈希MAP、JSON类型数据等&#xff0c;因此用户可以将很多常用数据库文件直接导入Tableau Desktop&am…

Django Web开发:构建强大RBAC权限管理系统的实战指南

文章目录 前言一、rbac 基于角色的权限管理1.acl 基于用户的权限管理2.rbac 基于角色的权限管理 二、应用示例1.配置角色资源a.分析表b.核心逻辑c.使用transfer在前端实现资源配置d.页面效果 2.登录时获取对应权限a.员工登录b.中间件c.前端请求d.效果图 3.前端-路由守卫-页面权…

GAT知识总结

《GRAPH ATTENTION NETWORKS》 解决GNN聚合邻居节点的时候没有考虑到不同的邻居节点重要性不同的问题&#xff0c;GAT借鉴了Transformer的idea&#xff0c;引入masked self-attention机制&#xff0c; 在计算图中的每个节点的表示的时候&#xff0c;会根据邻居节点特征的不同来…

解开基于大模型的Text2SQL的神秘面纱

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…

C++ STL set_difference 用法

一&#xff1a;功能 给定两个集合A&#xff0c;B&#xff1b;计算集合的差集&#xff0c;即计算出那些只包含在A中而不包含在B中的元素。 二&#xff1a;用法 #include <vector> #include <algorithm> #include <iostream>int main() {std::vector<int&…

JAVA基础 - 对象

目录 一. 简介 二. 空对象 三. 构造方法 四. 析构方法 五. this关键字 六. 对象销毁 一. 简介 在 Java 中&#xff0c;对象&#xff08;Object&#xff09;是面向对象编程的核心概念。 对象是类的实例化&#xff0c;它将数据&#xff08;属性&#xff09;和操作这些数据…

【运算放大器】输入失调电压和输入偏置电流(2)实例计算

概述 根据上一篇文章的理论&#xff0c;分别计算没有输入电阻和有输入电阻两种情况下的运放总输出误差。例题来自于TI高精度实验室系列课程。 目录 概述实例计算 1&#xff1a;没有输入电阻实例计算 2&#xff1a;有输入电阻总结 实例计算 1&#xff1a;没有输入电阻 要求&am…

使用SpringBoot集成Hibernate实现对数据库表CURD操作

Hibernate概述 Hibernate是一个开源的对象关系映射&#xff08;ORM&#xff09;框架&#xff0c;它提供了自动将Java对象映射到关系数据库表的功能&#xff0c;使得开发者可以通过面向对象的方式操作数据库&#xff0c;避免了直接使用SQL语句操作数据库的复杂性。Hibernate提供…

PyQt 信号与槽功能

PyQt 信号与槽功能 基本概念&#xff1a;在 PyQt 中&#xff0c;信号&#xff08;Signal&#xff09;与槽&#xff08;Slot&#xff09;是一种用于对象之间通信的机制。信号可以由一个对象发出&#xff0c;而槽是用于接收信号并执行相应操作的函数。 信号 信号是在 PyQt 的类…

通过IEC104转MQTT网关对接阿里云、华为云、亚马逊AWS、ThingsBoard、Ignition、Zabbix

随着工业互联网的快速发展&#xff0c;传统电力系统中的IEC 104协议设备正逐步向更加开放、灵活的物联网架构转型。MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;作为一种轻量级的消息传输协议&#xff0c;因其低带宽消耗、高可靠性和广泛的支持性&#xf…

vue3前端开发-小兔鲜项目-路由拦截器增加token的携带

vue3前端开发-小兔鲜项目-路由拦截器增加token的携带&#xff01;实际开发中&#xff0c;很多业务接口的请求&#xff0c;都要求必须是登录状态&#xff01;为此&#xff0c;这个token信息就会频繁的被加入到了请求头部信息中。request请求头内既然需要频繁的携带这个token.我们…

docker 篇

简单描述下&#xff0c;有时候真的要熟练&#xff0c;否者上了生产真的不知所措。 背景&#xff1a;有个项目上线了&#xff0c;依赖的项目没有上线&#xff0c;因此需要紧急发布&#xff0c;发现&#xff1a;打包环境有问题&#xff0c;第一、架构不一致&#xff0c;第二、环…

集团ERP信息化项目实施方案(82页PPT)

集团ERP信息化项目实施方案的82页PPT详尽阐述了企业资源规划&#xff08;ERP&#xff09;系统实施的全过程&#xff0c;旨在帮助集团整合多个业务流程于一个统一的平台。方案从当前市场环境分析入手&#xff0c;解释了ERP系统对于提升集团运营效率、降低成本和优化资源配置的必…

【OpenCV C++20 学习笔记】图片融合

图片融合 原理实现结果展示完整代码 原理 关于OpenCV的配置和基础用法&#xff0c;请参阅本专栏的其他文章&#xff1a;垚武田的OpenCV合集 这里采用的图片熔合的算法来自Richard Szeliski的书《Computer Vision: Algorithms and Applications》&#xff08;《计算机视觉&#…

Qt:愚蠢的qmake

博主参与了一个使用qmake构建的项目&#xff0c;包含几百个源文件&#xff0c;最近遇到一个恼人的问题&#xff1a;有时仅仅修改了一个.cpp文件&#xff0c;构建项目时就有可能触发全编译。但是编译时又会命中ccache的缓存&#xff0c;这说明源代码实际上内容并没有发生变化。即…

STM32是使用的内部时钟还是外部时钟

STM32是使用的内部时钟还是外部时钟&#xff0c;经常会有人问这个问题。 1、先了解时钟树&#xff0c;见下图&#xff1a; 2、在MDK中&#xff0c;使用的是HSEPLL作为SYSCLK&#xff0c;因此需要对时钟配置寄存器&#xff08;RCC_CFGR&#xff09;进行配置&#xff0c;寄存器内…