串替换

串替换:设串S="aqpbcderstbcdegh",子串T=“bcde",子串V="ff",实现子串V替代所有主串S中出现的和子串T相等的不重叠的子串,原主串S将由串S="aqpbcderstbcdegh",改变为S=“aqpffrstffgh"

算法思想:串的替换算法由以下几个步骤

(1)首先要在主串查中找出所有与子串T相等的子串,因此可以进行子串定位

(2)找出与子串T相等的所有子串的每一个开始位置,然后再依次用子串V做相应的替换

(3)由于子串T和子串V的长度不同,要改变原串S的长度

(4)如扫描完主串S的全部字符,未能找到与子串相等的子串,则主串S保持原样,不做任何替换

算法描述如下:

 1 typedef struct /*定义顺序串结构体*/
 2 {
 3     char ch[MaxSize];
 4     int Length;
 5
 6 }SeqString;/*SeqString是顺序串类型*/
 7 SeqString ss,tt,vv;/*定义全局共变量*/
 8 void StrReplace(SeqString S,SeqString T,SeqString V)/*替代函数*/
 9 {
10     int i,j,k,n,m;/*定义局部变量*/
11     for(i=0;i<S.Length;i++)/*扫描主串中S中的每个字符*/
12     for(j=i,k=0;S.ch[j]==T.ch[k];j++,k++)
13         /*子串T中的字符依次与主串S中的字符比较*/
14     {
15         /*printf("j=%d k=%d\n",j,k);*/
16         if(k==T.Length-1)
17             /*当K值与子串T长度相等,则找出与子串T相等的字串*/
18             if(V.Length<=T.Length)/*当子串V的长度小于等于子串T的长度时*/
19         {
20             /*printf("===>i=%d k=%d\n",i,k);*/
21             for(n=i,k=0;k<V.Length;n++,k++)
22                 S.ch[n]=V.ch[k];/*用子串V代替主串S中与子串T相等的字串*/
23             S.Length=S.Length-T.Length+V.Length;
24             /*重新计算主串S的长度*/
25             i=n;
26             /*跳过已经替代的字串,将i值定位到主串中尚未比较过的位置*/
27             m=T.Length-V.Length;/*计算子串T与子串V的长度差*/
28             if(m!=0)
29                 for(;n<S.Length;n++)
30                 S.ch[n]=S.ch[n+m];/*将子串V未能替代且已经比较过的主串S中多余的字符删除*/
31             break;/*跳出当前for循环,进行新一轮的比较*/
32
33             }
34             else/*当子串V的长度大于子串T的长度时*/
35             {
36                 m=V.Length-T.Length;
37                 S.Length=S.Length+V.Length-T.Length;/*重新计算主串S的长度*/
38                 printf("\nLength222=======%d\n",S.Length);
39                 for(n=S.Length;n>i;n--)
40                     S.ch[n+m-1]=S.ch[n-1];/*预留出要替代的字串的存放位置*/
41                 for(k=0;k<V.Length;k++,n++)
42                 {
43                     S.ch[n]=V.ch[k];
44                     printf("k=%d n=%d \n",k,n);
45                 }/*用于串V的字串替代主串S中与子串T相等的字串*/
46                 i=n;
47                 /*跳过已经替代的字串,将i值定位到主串中尚未比较过的位置*/
48                 outlin(S);
49                 break;/*跳出当前for循环,进行新一轮的比较*/
50             }
51         }
52         outlin(S);
53     }

时间: 2025-01-06 04:42:34

串替换的相关文章

ios-字符串替换-正则表达式-例子

需求:在html中查找并替换相应的html标签 代码实现 - (NSString *)replaceImageHtml:(NSString *)oldHtml { NSString *regex = @"(<img.*?/>)"; NSRange r; NSMutableString *newHtml = [NSMutableString stringWithString:oldHtml]; BOOL flag = false; while (flag == false)

NYoj-字符串替换

字符串替换 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 编写一个程序实现将字符串中的所有"you"替换成"we" 输入 输入包含多行数据 每行数据是一个字符串,长度不超过1000 数据以EOF结束 输出 对于输入的每一行,输出替换后的字符串 样例输入 you are what you do 样例输出 we are what we do 错误思路: #include<cstdio> #include<cstring&

UVA 10115 子符串替换

Text-processing tools like awk and sed allow you to automatically perform a sequence of editing operations based on a script. For this problem we consider the specific case in which we want to perform a series of string replacements, within a single

【代码笔记】iOS-字符串替换回车和换行

一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //替换回车符和空格 NSString *oldStr=@" 1 2 4 "; NSLog(@"----oldStr---%@",oldStr); //去掉首尾空格 NSString *newStr=[oldStr strin

31-语言入门-31-字符串替换

题目地址:?http://acm.nyist.net/JudgeOnline/problem.php?pid=113? ? 描述编写一个程序实现将字符串中的所有"you"替换成"we" 输入输入包含多行数据 每行数据是一个字符串,长度不超过1000 数据以EOF结束输出对于输入的每一行,输出替换后的字符串样例输入you are what you do样例输出 we are what we do ? ? 代码: #include <stdio.h> //处

IOS简单的字串替换方法stringByTrimmingCharactersInSet 和空格的替换 ()

1 NSString *str = @"一个 (ABC) #@!#^#[email protected]#[email protected]!212s012yhsn 汉0932字#@!中..文//>?输[email protected]#$#@%#^#^%&^*&(*)入"; 2 NSMutableCharacterSet *set = [[NSMutableCharacterSet alloc] init]; 3 [set formUnionWithCharac

让EFCore更疯狂些的扩展类库(二):查询缓存、分部sql、表名替换的策略配置

前言 上一篇介绍了扩展类库的功能简介,通过json文件配置sql语句 和 sql语句的直接执行,这篇开始说明sql配置的策略模块:策略管理器与各种策略的配置. 类库源码:github:https://github.com/skigs/EFCoreExtend 引用类库:nuget:https://www.nuget.org/packages/EFCoreExtend/ PM> Install-Package EFCoreExtend 策略管理器功能简介 用于管理策略 与 策略执行器和调用(目前分

数据结构实践项目——串

本文针对数据结构基础系列网络课程(4):串. 1. 串的基本概念及导学 2. 串的顺序存储及其基本操作实现 3. 串的顺序存储应用 4. 串的链式存储及其基本操作实现 5. 串的模式匹配(Brute-Force算法) 6. 串的模式匹配(KMP算法) [项目1 - 建立顺序串的算法库] 定义顺序串的存储结构,实现其基本运算,并完成测试. 要求: 1.头文件sqString.h中定义数据结构并声明用于完成基本运算的函数.对应基本运算的函数包括: void StrAssign(SqString &s

串(C++实现)

本段程序实现串的存储结构是采用堆的动态分配存储表示,并实现了几乎所有常用的串的配套函数 其中逻辑性比较强的就是串的模式匹配算法,在下面的程序中,分别用BF算法和KMP算法对其进行了 实现. #include<iostream> using namespace std; struct HString { HString() { ch = 0; length = 0; } char * ch;//字符存储区 int length;//串长 }; void ClearString(HString &