字符串替换程序

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. 使用.NET 6开发TodoList应用(23)——实现请求限流

    系列导航及源代码 使用.NET 6开发TodoList应用文章索引 需求 Rate Limiting允许保护我们的API服务免受过多请求的连接导致的性能下降,如果请求次数超过了限制,API服务端将会拒 ...

  2. 【机器学习】VAE

    机器学习算法-VAE 目录 机器学习算法-VAE 1. VAE模型推导 1.1 算法引入 1.2 模型推导 1.3 损失函数 1.4 重参数技巧 2. 实现 2.1 模型定义 2.2 实验 1. VA ...

  3. nginx的fastcgi配置

    首先参考了一份配置注释(来自"小刚的博客"): #运行用户 user www-data; #启动进程,通常设置成和cpu的数量相等 worker_processes 1; #全局错 ...

  4. 程序员必备的编程助手!SmartCoder助你轻松集成HMS Core

    当开发者在集成HMS Core遇到一些疑问时,需要翻阅官网文档,反复查看集成说明或者API调用说明,或者研究GitHub上的开源示例代码,花费较多的时间,在IDE环境和网页浏览器之间反复切换也会耗费很 ...

  5. vue学习15-自定义组件model使用

    <!DOCTYPE html> <html lang='en'> <head> <meta charset='UTF-8'> <meta http ...

  6. 1. flink 基础

    flink word count  程序 1. 数据集模式 pom.xml 文件 <?xml version="1.0" encoding="UTF-8" ...

  7. 反汇编分析C++代码

    编译环境:Windows 10 + VS2015 1.问题引入 在Win32环境下,CPU小端模式,参数用栈来传递,写出输出结果. 代码如下: int main() { long long a = 1 ...

  8. 如何使用自对弈强化学习训练一个五子棋机器人Alpha Gobang Zero

    前言 2016年3月,Alpha Go 与围棋世界冠军.职业九段棋手李世石进行围棋人机大战,以4比1的总比分获胜,在当时引起了轩然大波.2017年10月,谷歌公布了新版五子棋程序 AlphaGo Ze ...

  9. ApacheCN Linux 译文集(二) 20211206 更新

    CentOS7 Linux 服务器秘籍 零.前言 一.安装 CentOS 二.配置系统 三.管理系统 四.用 YUM 管理包 五.管理文件系统 六.提供安全性 七.构建网络 八.使用文件传输协议 九. ...

  10. https的页面内嵌入http页面报错的问题

    1.https的页面内嵌入http页面报错 在HTTPS的页面上嵌入http的页面时,浏览器会直接报错.比如在HTTPS页面上用 iframe 直接嵌入一个 http 页面,比如我们可以在百度上直接嵌 ...