C++编程逻辑讲解step by step:字符串的查找和替换

题目

word中有查找和替换功能,编程实现在一个字符串中进行查找和替换的功能。


分析

题目不允许使用另外数组,要求在原数组上进行替换;需要不断地移动字符串,或者增长或者缩短,初始数组必须足够大。


代码

 

#include <iostream>
#include <cstring>
using namespace std;
char str[]="East China Normal University is very beautiful. I like East China Normal University very much. There is a big playground in East China Normal University. The teachers in East China Normal University are very kind. The students are very polite and smart.";
void search(char *, char*, int, int);
void replace(char *, char*, int, int);
int main(){char s1[50];           //s1 存放查找字符串 cout<<"Please enter the string you want to find: ";gets(s1);int l1=strlen(s1);    char s2[50];             //s2 存放替换字符串cout<<"Please enter the string to replace: ";gets(s2);int l2=strlen(s2);search(s1, s2, l1, l2);cout<<"The replaced array is :"<<endl;cout<<str<<endl;return 0;
} 
void replace(char *s2, char *p1, int l1, int l2){       //s2 接收替换字符串,p1 接收要替换位置的首字符地址,l1 存放查找字符串的长度,l2 存放替换字符串的长度 int i, j, k, m=l1-l2;char *r1, *r2;if(m>0){                                            //查找字符串大于替换,进行前移 for(i=0; i<l2; i++)                             //把原字符串替换 *(p1+i)=*(s2+i);for(j=l2; *(p1+m+j)!='\0'; j++)                 //前移操作 *(p1+j)=*(p1+m+j);*(p1+j)='\0';}else if(m<0){                                       //替换字符串大于查找,进行后移 i=strlen(str)-1;for(k=0; k<-m; k++)                             //铺路,把字符串结束标志向后移 m 个位置 *(str+i+k+1)=' ';            *(str+i+k+1)='\0';                              //路的末尾加上字符串结束标志 for( ; (str+i)>=(p1+l1); i--)                   //后移操作 *(str+i-m)=*(str+i);for(j=0; j<l2; j++)                             //把原字符串替换 *(p1+j)=*(s2+j);}else                                                //替换字符串等于查找for(r1=s2; r1<(s2+l1); r1++, p1++)*p1=*r1;	
}
void search(char *s1, char *s2, int l1, int l2){        //s1 接收查找字符串,s2 接收替换字符串,l1 存放查找字符串的长度,l2 存放替换字符串的长度char *p1, *p2, *s3;int i=1, j=0;bool flag=false;for(p1=str; *(p1+l1-1)!='\0'; p1++){if(*p1==*s1){if(*(p1+l1-1)==*(s1+l1-1)){                 //头尾字符相同,且长度相同 i=1;for(p2=p1, s3=s1; i<=l1; p2++, s3++, i++){if(*p2==*s3&&i==l1) flag=true;      //完全相同 if(*p2!=*s3) break;                 //发现不同,退出循环,较少情况 if(flag){replace(s2, p1, l1, l2);        //进行替换 j++;flag=false;}}	}}}if(j==0)cout<<"Not found!";                         //没找到 else cout<<"Found "<<j<<" results in all.";cout<<endl;
}

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

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

相关文章

基于PI控制的三相整流器控制系统的simulink建模与仿真,包含超级电容充电和电机

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于PI控制的三相整流器控制系统的simulink建模与仿真,用MATLAB自带的PMSM电机设为发电机&#xff0c;输入为转速&#xff0c;后面接一个可以调节电流的三相整流器&#xff0c…

three.js地理坐标系有哪些,和屏幕坐标系的转换。

坐标系很好理解&#xff0c;就是点线面体的位置&#xff0c;一个点是一个坐标&#xff0c;一条线段2个坐标&#xff0c;一个矩形四个坐标&#xff0c;一个立方体8个坐标&#xff0c;three.js面对的是三维空间&#xff0c;屏幕则是二维的&#xff0c;这就面临着转换问题&#xf…

数字化精益生产系统--SRM供应商关系管理

SRM供应商关系管理&#xff0c;全称为Supplier Relationship Management&#xff08;供应商关系管理&#xff09;系统&#xff0c;是一种专门用于管理采购供应链和供应商关系的软件系统。该系统通过集成各个环节的采购活动&#xff0c;帮助企业实现采购流程的自动化、标准化和优…

GY-30光照传感器软件I2C方式驱动代码,基于STM32Cube

GY-30光照传感器的具体资料可以去淘宝搜索然后问卖家要&#xff0c;网上也有&#xff0c;所以这里我就不多嘴了。 VCC连接3到5伏电压&#xff0c;根据文件开头的描述在STM32CubeMX中配置好外设。 STM32Cube开发方式就是4个字“简单直接”&#xff0c;直接上代码。 gy30.h #…

hive的表操作

常用的hive命令 切换数据库use test;查询表的建表信息show create table 数据库名称.表名;查看表的类型信息desc formatted 数据库名称.表名; 删除内部表 drop table 数据库名称.表名; 先启动hdfs &#xff0c;mysql &#xff0c; hiveservice2&#xff0c;beeline CREATE [EX…

模拟QQ聊天界面遇到的问题:关于PyQt5 GUI模块不允许在多线程中进行操作的解决办法

简介 今天想要使用PyQt5结合Websocket实现一个小小的QQ聊天界面。 介绍一下我实现这个功能的具体思路&#xff1a;GUI界面运行起来后&#xff0c;创建一个线程去连接Websocket服务器&#xff0c;然后主界面类中实现了websocket的基本回调函数。比如&#xff0c;发送消息的回调…

持续部署的7个陷阱及其避免方法

什么是持续部署&#xff1f; 持续部署是一种软件开发实践&#xff0c;其中代码更改会自动部署到生产中&#xff0c;无需开发人员或运营团队的明确批准。这实现了从开发到部署的完全自动化流程&#xff0c;确保新功能、错误修复和更新能够快速提供给最终用户。通过将此流程集成…

Bioconda软件安装神器:多版本并存、环境复制、环境导出

Conda包管理系统 Conda是一种通用包管理系统&#xff0c;旨在构建和管理任何语言的任何类型的软件。通常与Anaconda (集成了更多软件包&#xff0c;https://www.anaconda.com/download/#download)和Miniconda(只包含基本功能软件包, https://conda.io/miniconda.html)一起分发…

Kubernetes (K8s) 底层原理

Kubernetes (K8s) 的底层原理涉及多个关键组件和概念&#xff0c;确保容器化应用程序的自动化部署、扩展和管理。以下是 Kubernetes 的底层原理及其关键组件的详细描述。 核心组件 Etcd 功能&#xff1a;分布式键值存储&#xff0c;用于存储集群的所有数据&#xff0c;包括配置…

昇思25天学习打卡营第9天|MindSpore-Vision Transformer图像分类

Vision Transformer图像分类 Vision Transformer(ViT)简介 近些年,随着基于自注意(Self-Attention)结构的模型的发展,特别是Transformer模型的提出,极大地促进了自然语言处理模型的发展。由于Transformers的计算效率和可扩展性,它已经能够训练具有超过100B参数的空前…

【C++】运算符重载

目录 运算符重载加号运算符左移运算符递增运算符赋值运算符关系运算符函数调用运算符 运算符重载 运算符重载概念&#xff1a;对已有的运算符重新进行定义&#xff0c;赋予其另一种功能&#xff0c;以适应不同的数据类型 加号运算符 目标&#xff1a;实现两个对象相加或类和…

java面试之jvm常见面试题

1、JVM是什么&#xff1f;JVM的主要组成部分&#xff1f; JVM&#xff08;Java Virtual Machine&#xff09;是Java程序的执行环境&#xff0c;它使得Java程序能够“一次编写&#xff0c;到处运行”。JVM主要由以下部分组成&#xff1a; 1、类加载器&#xff08;ClassLoader&…

MySQL篇-SQL优化实战

SQL优化措施 通过我们日常开发的经验可以整理出以下高效SQL的守则 表主键使用自增长bigint加适当的表索引&#xff0c;需要强关联字段建表时就加好索引&#xff0c;常见的有更新时间&#xff0c;单号等字段减少子查询&#xff0c;能用表关联的方式就不用子查询&#xff0c;可…

某Dota/IM的某电竞对战平台玩家助手、查看战绩、胜率等

功能说明 WAR3游戏启动后&#xff0c;可以自动获取游戏双方的玩家列表&#xff0c;然后查询显示玩家的战绩及个人信息。附带查看玩家的战绩详情、最近游戏&#xff0c;查看对手及友方的战绩详情&#xff0c;据此推算出是否开黑、是否小号等信息 使用方法及运行效果 启动 查…

腾讯地图异步调用

<template><!-- 定义地图显示容器 --><div id"container"></div> </template><script setup>import { onMounted } from vue;const mapKeys import.meta.env.VITE_GLOB_TX_MAP_KEYS;function initMap() {// //定义地图中心点坐…

【MySQL备份】mysqldump基础篇

目录 1.简介 2.基本用途 3.命令格式 3.1常用选项 3.2常用命令 4.备份脚本 5.定时执行备份脚本 1.简介 mysqldump 是 MySQL 数据库管理系统的命令行实用程序&#xff0c;用于创建数据库的逻辑备份。它能够导出数据库的结构&#xff08;如表结构、视图、触发器等&#xf…

【C++题解】1456. 淘淘捡西瓜

问题&#xff1a;1456. 淘淘捡西瓜 类型&#xff1a;贪心 题目描述&#xff1a; 地上有一排西瓜&#xff0c;每个西瓜都有自己的重量。淘淘有一个包&#xff0c;包的容量是固定的&#xff0c;淘淘希望尽可能在包里装更多的西瓜&#xff08;当然要装整个的&#xff0c;不能切开…

C#——异步Task详情

C#异步Task 异步&#xff1a;多任务开始执行&#xff0c;只需要主任务 A 执行完成就算结束&#xff0c;主任务执行的时候&#xff0c;可以同时执行异步任务 B、C&#xff0c;主任务 A 可以不需要等待异步任务 B、C 的结果。 在C#中&#xff0c;异步编程主要通过async和await关…

三维地图Cesium中,如何监听地图点击事件,实现在实体上面鼠标右击时做处理。

在 Cesium 中&#xff0c;如果你想在实体&#xff08;Entity&#xff09;上实现鼠标右击&#xff08;右键点击&#xff09;的处理&#xff0c;你需要使用 Cesium 的事件系统来监听鼠标事件&#xff0c;并结合一些逻辑来判断点击是否发生在实体上。由于 Cesium 没有直接提供“点…

03-《含羞草》

含羞草 含羞草&#xff08;学名&#xff1a;Mimosa pudica Linn. &#xff09;&#xff1a;为豆科多年生草本或亚灌木&#xff0c;由于叶子会对热和光产生反应&#xff0c;受到外力触碰会立即闭合&#xff0c;所以得名含羞草。形状似绒球。开花后结荚果&#xff0c;果实呈扁圆形…