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

news2024/9/8 23:40:59

目录

一.替换单个字符

方法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.coloradmin.cn/o/1957958.html

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

相关文章

Java Web——第一天

Web开发课程安排 Web标准 Web标准也称为网页标准&#xff0c;由一系列的标准组成&#xff0c;大部分由W3C( World Wide Web Consortium&#xff0c;万维网联盟)负责制定 三个组成部分: HTML:负责网页的结构 (页面素和内容) CSS:负责网页的表现 (页面元素的外观、位置等页面…

Ubuntu 20.04.6 安装 Elasticsearch

1.准备 -- 系统更新 sudo apt update sudo apt upgrade -- 安装vim 文本编辑器 sudo apt install vim-- jdk 版本确认 java -versionjdk 安装可以参照&#xff1a;https://blog.csdn.net/CsethCRM/article/details/140768670 2.官方下载Elasticsearch 官方地址&#xff1a;h…

PPT图表制作

一、表格的底纹 插入→表格→绘制表格→表设计→选择单元格→底纹 二、把一张图片做成九宫格 1. 把一张图片画成九宫格&#xff08;处理过后还是一张图片&#xff0c;但是有框线&#xff09; 绘制33表格→插入图片→全选表格单元格→右键设置形状格式→填充→图片或纹理填充…

Teamcenter RAC开发,创建Item的两种方式

1、如果描述不必填&#xff0c;采用胖客户端的创建方式 newItem itemType.create(newItemId, "", targetTypeComp.getTypeName(), item_name, // "test1", null, null2、如果描述必填&#xff0c;则需要采用SOA的创…

汇川CodeSysPLC教程03-2-6 ModBus TCP

什么是ModBus TCP&#xff1f; ModBus TCP是一种基于TCP/IP协议的工业网络通信协议&#xff0c;常用于工业自动化和控制系统。它是ModBus协议的一个变种&#xff0c;ModBus协议最初由Modicon&#xff08;现在是施耐德电气的一部分&#xff09;在1979年开发。 以下是ModBus TC…

二分类、多分类、多标签分类的评价指标

前言 在机器学习和深度学习中&#xff0c;常见的分类任务可以分为&#xff1a;二分类&#xff08;Binary Classification); 多分类&#xff08;Multi-class Classification); 多标签分类&#xff08;Multi-label Classification); 序列分类 (Sequence Classification); 图分类…

SQL优化相关

文章目录 SQL优化1. 数据插入2. 主键优化页分裂页合并索引设计原则 3. order by 优化4. group by 优化5. limit优化6. count优化7. update 优化 SQL优化 1. 数据插入 当我们需要插入多条数据时候&#xff0c;建议使用批量插入&#xff0c;因为每次插入数据都会执行一条SQL&am…

使用YApi平台来管理接口

快速上手 进入YApi官网&#xff0c;进行注册登录https://yapi.pro/添加项目 3. 添加分类 4. 添加接口 5. 添加参数 添加返回数据 可以添加期望 验证 YAPI&#xff08;Yet Another Practice Interface&#xff09;是一个现代化的接口管理平台&#xff0c;由淘宝团队…

pip install albumentations安装下载遇19kB/s超级慢细水管解决办法

albumentations 是一个用于图像增强的 Python 库&#xff0c;它提供了丰富的图像变换功能&#xff0c;可以用于数据增强&#xff0c;从而提高深度学习模型的泛化能力。 直接安装命令&#xff1a; pip install albumentations但是如果半夜遇到这种19kB/s的下载速度 为头发着想&…

【通信模块】LoRa与LoRaWAN简介

LoRaWAN网络 技象科技相关文章总结&#xff0c;学习笔记&#xff0c;原文链接如下&#xff0c;转载请标明该出处&#xff1a; LORA&#xff1a; https://www.techphant.cn/tag/l-2 LORAWAN&#xff1a;https://www.techphant.cn/tag/l-3 其他&#xff1a;如LAN https://www…

网络通信---TCP协议1

今日内容 三次握手: 指建立tcp连接时&#xff0c;需要客户端和服务端总共发送三次报文确认连接。 四次挥手&#xff1a; 断开一个tcp连接&#xff0c;需要客户端和服务端发送四个报文以确认断开。 编程模型 TCP报文 客户端 服务端

第6篇文献研读生态廊道相关综述

该文发在生态与农村环境学报。该文章写了生态廊道概念的发展历程、生态廊道类型及功能、生态廊道划定的理论和方法、生态廊道的时间和国内大型生态廊道建设实践。 这篇文章可以让大家了解生态廊道的知识。

Rocketmq-5.3.0和对应dashboard的最新版本Docker镜像,本人亲自制作,部署十分方便,奉献给大家

一、Rocketmq 最新版本5.3.0&#xff0c;采用docker镜像安装方式 二、官方rocketmq镜像对内存等参数配置非常不灵活便利 为了快速、灵活部署rocketmq&#xff0c;以及能方便对其内存等参数进行设置&#xff0c;特意制作了关于它的docker镜像。 三、镜像获取 最新rocketmq-5.…

使用二进制来理解数据和二进制的计算

1 使用二进制来理解数据 和人类的思维习惯不同的是&#xff0c;计算机将把所有的东西数字化之后才会进行处理。那么计算机能理解的数字是什么样的呢&#xff1f;其实&#xff0c;在计算机内部&#xff0c;不管是什么信息都使用二进制来保存和处理的。 计算机为什么要用二进制…

芋道微服务全栈开发日记(商品sku数据归类为规格属性)

商品的每一条规格和属性在数据库里都是单一的一条数据&#xff0c;从数据库里查出来后&#xff0c;该怎么归类为对应的规格和属性值&#xff1f;如下图&#xff1a; 在商城模块&#xff0c;商品的单规格、多规格、单属性、多属性功能可以说是非常完整&#xff0c;如下图&#x…

搭建规范化的vue2项目

项目包含的库 Vue2VuexRouterEslintPrettier 环境 vue&#xff1a;2.6.14 eslint&#xff1a;7.32.0 prettier&#xff1a;2.4.1 eslint-plugin-prettier&#xff1a;4.0.0 eslint-plugin-vue&#xff1a;8.0.3 vue/cli&#xff1a;5.0.8 步骤 全局安装cli工具 npm in…

Vue3----扩展 element Plug card

扩展 element Plug card 增加全屏&#xff0c;折叠操作项 核心代码 <template><div class"cc-card-component"><el-card v-if"state.isShow" :class"state.class" :bodyStyle"bodyStyle" :shadow"props.shadow…

ic进阶|性能篇02:一文带你了解一种特殊的并行技术-展开!

本期文章让我们聊聊一种数字ic设计技术——展开&#xff0c;展开用于产生一个一次迭代就相当于原有结构的多次迭代的新电路结构。其相当于之前聊过的折叠技术的反向操作&#xff0c;折叠使用一个功能单元通过多次迭代来完成原有电路结构一次迭代的操作&#xff0c;相对于通过时…

访问控制列表(ACL)

文章目录 ACL原理与基本配置ACL分类ACL组成ACL规则的匹配与应用 ACL原理与基本配置 ACL(Access Control List&#xff0c;访问控制列表) 读取二层、三层、四层报文信息根据预先定义好的规则对报文进行过滤和分类实现网络访问控制、防止网络攻击和提高网络带宽利用率等目的提高…

USB3.0的等长要求到底是多少?

USB2.0与USB3.0接口的PCB布局布线要求PCB资源PCB联盟网 - Powered by Discuz! (pcbbar.com) 90欧姆阻抗&#xff0c;走差分线&#xff1a; 重点来了&#xff1a;