字符串替换程序

C++ Primer 324页

// replace:从str字符串中查找oldVal字符串,如果找到就替换成newVal字符串。
void replace(string &str, const string &oldVal, const string &newVal) {
string tmp(str, 0, oldVal.size()); // 初始化一个str的子串,用于与oldVal进行比较。
auto head = str.begin(); // 指示tmp的begin()迭代器在str中的位置。
auto tail = head + oldVal.size(); // 指示tmp的end()迭代器在str中的位置。 if(str.size() < oldVal.size()) // 如果str比要查找的字符串还短,直接退出。
return; while((tail-1) != str.end()) { // tail-1为tmp最后一个字符在str中的位置,只有最后一个字符有效就循环
if(tmp == oldVal) { // 在str中找到了oldVal
head = str.erase(head, tail);
for(const auto &v : newVal) { // 由于insert(p, b, e)返回的是void,所以使用insert(p, v)循环插入。
head = str.insert(head, v);
++head; // 指向插入字符的下一个字符。
}
if(str.end() - head >= oldVal.size()) { // 保证剩余的字符长度大于oldVal的长度
tail = head + oldVal.size();
tmp.assign(head, tail);
} else {
return;
}
} else {
tmp.erase(tmp.begin()); // 模拟队列操作。这里删除了第一个,string重新分配并复制,不划算。
tmp.insert(tmp.end(), 1, *tail); // 这两句替换成tmp = str.substr(head-str.begin(), oldVal.size());
++head;
++tail;
}
}
}

使用replace和下标版本

// replace:从str字符串中查找oldVal字符串,如果找到就替换成newVal字符串。
void replace(string &str, const string &oldVal, const string &newVal) {
size_t oldSize = oldVal.size();
size_t newSize = newVal.size(); // 不能保存一个str.size()的值,应该str在变化,长度也是在变化的。
string tmp(str, 0, oldSize);
size_t head = 0; if(str.size() < oldSize)
return; while(head + oldSize <= str.size()) {
if(tmp == oldVal) {
str.replace(head, oldSize, newVal);
head += newSize;
if(str.size() - head - 1 >= oldSize) { // "-1"是应为head是从0开始的,少减了一个。
tmp.assign(str, head, oldSize);
} else {
return;
}
} else {
tmp = str.substr(++head, oldSize);
}
}
}

c++ 字符串替换程序 p324的更多相关文章

  1. Python 实现类似sed命令的字符串替换小程序

    环境 PyCharm, Windows 背景 sed命令 sed 's/原字符串/新字符串' 单引号中间是s表示替换,原字符串就是要被替换掉的字符串,新字符串就是想要的字符串. 效果 在命令行输入py ...

  2. 微信小程序字符串替换

    字符串替换有两种,一种是替换一个子字符串,一种是将子字符串全部替换 替换一个子字符串 要求:将“ ”(空格)替换成“,” var isguestnumbername=“aaa bbb ccc” isg ...

  3. 字符串混淆技术应用 设计一个字符串混淆程序 可混淆.NET程序集中的字符串

    关于字符串的研究,目前已经有两篇. 原理篇:字符串混淆技术在.NET程序保护中的应用及如何解密被混淆的字符串  实践篇:字符串反混淆实战 Dotfuscator 4.9 字符串加密技术应对策略 今天来 ...

  4. nyoj113_字符串替换

    字符串替换 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 编写一个程序实现将字符串中的所有"you"替换成"we"   输入 ...

  5. ACM 字符串替换

    字符串替换 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 编写一个程序实现将字符串中的所有"you"替换成"we"   输入 ...

  6. poj 3981 字符串替换

    字符串替换 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10871   Accepted: 5100 Descriptio ...

  7. 基于C#简单实现多个word文件和Excel文件的全局字符串替换

    公司整理文档工作中,出现了一个需要使用全局字符替换多个word文档.excel文档中的内容的需求.虽然office.WPS都有全局替换的功能(ctrl+h),但是文件过多,且需要替换多次,工作量还是比 ...

  8. php字符串替换的几个函数

    strtr() str_replace() substr_replace() preg_replace() strtr()的用法: <?php $str = "test"; ...

  9. Django(完整的登录示例、render字符串替换和redirect跳转)

    day61 1. 登录的完整示例                       复习:         form表单往后端提交数据需要注意哪三点:  五一回来默写    <-- 谁写错成from谁 ...

随机推荐

  1. Linux系统管理学习实训任务书

    1.<Linux系统管理实训任务一之搭建实验基础环境> https://www.toutiao.com/i6763578305091207694/ 2.<Linux系统管理实训任务一 ...

  2. SYCOJ1717负二进制

    题目-负二进制 (shiyancang.cn) 进制的实质在于对于进制数的选择,选择不满足的填入当前的位置,然后除掉,继续开始选择.但是对于本题,是负数,但是进制上的数字为正数,所以就要调整,借位,因 ...

  3. Lyft 宣布开源基础设施工具管理平台 Clutch!

    今天我们很高兴地宣布,Lyft 的基础设施工具可扩展 UI 和 API 平台clutch已开放源代码,clutch使工程团队能够构建.运行和维护用户友好的工作流,这些工作流还包含特定于域的安全机制和访 ...

  4. BERT-Pytorch版本代码pipline梳理

    最近在做BERT的fine-tune工作,记录一下阅读项目https://github.com/weizhepei/BERT-NER时梳理的训练pipline,该项目基于Google的Transfor ...

  5. k8s中kubeconfig的配置及使用

    1.概述 kubeconfig文件保存了k8s集群的集群.用户.命名空间.认证的信息.kubectl命令使用kubeconfig文件来获取集群的信息,然后和API server进行通讯. 注意:用于配 ...

  6. 阐述JDBC操作数据库的步骤

    1. 加载驱动. Class.forName("oracle.jdbc.driver.OracleDriver"); (注意:加载驱动在JDBC 4.0中是可以省略的,自动从类路径 ...

  7. gin中如何记录日志和错误日志

    package main import ( "github.com/gin-gonic/gin" "io" "os" ) func main ...

  8. vscode自定义代码片段,自定义注释片段(动态时间)

    下载vscode 一.打开vscode,点击左下角设置图标. 二.点击用户代码片段 三.点击新建全局代码片段文件 四.输入自定义代码片段配置文件名,例如:vue.json 五.进行代码片段配置示例如下 ...

  9. 异常机制(Exception)

    异常机制(Exception) 异常程序是指程序运行中出现的不期而至的各种状况,如文件找不到,网络连接失败,非法参数等. 异常发生在程序运行期间,它影响了正常的程序执行流程 检查性异常 最具代表性的检 ...

  10. STM32定时器触发ADC多通道连续采样,DMA缓存结果

    STM32的ADC使用非常灵活,采样触发方面:既支持软件触发,定时器或其他硬件电路自动触发,也支持转换完成后自动触发下一通道/轮转换.转换结果存储方面:既支持软件读取和转存,也支持DMA自动存储转换结 ...