当前位置: 首页 > wzjs >正文

深圳企业网站建设标准网站设置默认主页

深圳企业网站建设标准,网站设置默认主页,wordpress 功能 删除,网站备案的原则【算法】 【c】字符串s1 中删除所有 s2 中出现的字符 eg: s1:“helloworld” s2:“wd” 删除后:s1:“helloorl” 1 双循环匹配并删除–>时间复杂度O(n^2) string 里面的删除函数–>erase std::string::erase 是 C 标准库中用于删除字符串中字符…

【算法】 【c++】字符串s1 中删除所有 s2 中出现的字符

eg:
s1:“helloworld”
s2:“wd”
删除后:s1:“helloorl”

1 双循环匹配并删除–>时间复杂度O(n^2)

string 里面的删除函数–>erase

std::string::erase` 是 C++ 标准库中用于删除字符串中字符或子串的方法。


1. erase(pos, len)
  • 作用:从字符串的 索引 pos 位置开始,删除 len 个字符。
  • 参数
    • pos:起始索引(从 0 开始)。
    • len:要删除的字符数量(默认值 std::string::npos,即删除到末尾)。
  • 返回值:修改后的 string 自身(左移剩余字符)。

示例

#include <iostream>
#include <string>using namespace std;int main() {string s = "abcdef";s.erase(2, 2);  // 从索引 2 ('c') 开始删除 2 个字符,变成 "abef"cout << s << endl;  // 输出: "abef"return 0;
}

2. erase(iterator pos)
  • 作用:删除 pos 迭代器指向的字符。
  • 参数
    • pos:指向要删除字符的 迭代器
  • 返回值:指向删除字符后 下一个字符的迭代器

示例

#include <iostream>
#include <string>using namespace std;int main() {string s = "abcdef";auto it = s.begin() + 2;  // 指向 'c's.erase(it);  // 删除 'c',变成 "abdef"cout << s << endl;  // 输出: "abdef"return 0;
}

3. erase(iterator first, iterator last)
  • 作用:删除 [first, last) 范围内的字符(包括 first,不包括 last)。
  • 参数
    • first:起始迭代器。
    • last:结束迭代器(不删除)。
  • 返回值:指向删除区域后第一个剩余字符的迭代器。

示例

#include <iostream>
#include <string>using namespace std;int main() {string s = "abcdef";s.erase(s.begin() + 1, s.begin() + 4);  // 删除索引 1~3 ('b' 到 'd'),变成 "aef"cout << s << endl;  // 输出: "aef"return 0;
}

4. erase-remove惯用法(高效删除多个字符)

在 C++ 里,erase 不能直接删除多个 指定字符,但可以配合 std::remove_if 实现 高效批量删除

示例

#include <iostream>
#include <string>
#include <algorithm>using namespace std;int main() {string s = "abcdebc";// 删除所有 'b's.erase(remove(s.begin(), s.end(), 'b'), s.end());cout << s << endl;  // 输出: "acdec"return 0;
}

原理

  1. remove 把所有 非 ‘b’ 的字符 重新排列到前面,返回新末尾的迭代器。
  2. erase 删除新末尾之后的所有字符,完成去重。

总结

用法作用适用场景
erase(pos, len)pos 开始删除 len 个字符删除固定范围的子串
erase(iterator pos)删除 pos 迭代器指向的字符通过迭代器删除单个字符
erase(iterator first, iterator last)删除 [first, last) 范围字符通过迭代器删除一段子串
erase(remove_if(...))批量删除多个指定字符需要高效删除多个字符

#include<iostream>
using namespace std;
#include<string>
#include<vector>
void dele(string& s1, string& s2)
{int n2 = s2.size();if (n2 < 1)return;for (int i = 0;i < s1.size();i++){for (int j = 0;j < n2;j++){if (s1[i] == s2[j]){s1.erase(i,1);i--;}}}}
int main()
{string s1, s2;cin >> s1 >> s2;dele(s1, s2);cout << s1 << endl;
}

2unordered_set存储s2

unordered_set使用

是 C++ STL 提供的 无序集合,底层使用 哈希表 实现,支持 O(1) 平均时间复杂度 进行 插入、删除、查找

1. 基本用法

(1) 头文件

#include <unordered_set>

(2) 声明

unordered_set<int> mySet;  // 存储 int 类型
unordered_set<string> mySet2;  // 存储 string 类型

(3) 插入

mySet.insert(10);
mySet.insert(20);

(4) 遍历

for (int num : mySet) {  cout << num << " ";  
}

⚠️ 注意: unordered_set 无序存储,遍历顺序 不确定


2. 主要操作

(1) 插入元素

unordered_set<int> mySet;
mySet.insert(1);
mySet.insert(2);

(2) 查找元素

if (mySet.find(2) != mySet.end()) {  cout << "2 存在" << endl;  
} else {  cout << "2 不存在" << endl;  
}

find(x) != end() 表示 找到 x,否则 未找到

(3) 删除元素

mySet.erase(2);  // 删除值为 2 的元素

(4) 统计个数

cout << mySet.size() << endl;

(5) 清空集合

mySet.clear();

3. 高级用法

(1) 使用 count(x) 判断是否存在

if (mySet.count(2)) {cout << "2 存在" << endl;
} else {cout << "2 不存在" << endl;
}

count(x) 返回 0(不存在)或 1(存在)。

(2) 迭代器遍历

for (auto it = mySet.begin(); it != mySet.end(); ++it) {cout << *it << " ";
}

4. 时间复杂度

操作平均时间复杂度
insert(x)O(1)
find(x)O(1)
erase(x)O(1)
遍历O(n)

5. 适用场景
快速去重unordered_set 可以存储唯一值,O(1) 查找是否存在
快速查找:比 vectorset 更快的 O(1) 查找
集合操作:常用于 字符删除、重复元素去除 等。


  • 使用 unordered_set 来加速字符匹配,使得删除操作的时间复杂度从优化到 O(n)。
  • set的查询速度为O(1)
  • 使用writeIndex保存s1要写入的位置
  • 在存储s2的set里面查询,是否存在对应字符,不存在的写入s1前面
  • 删掉后续字符
#include <iostream>
#include <string>
#include <unordered_set>using namespace std;void dele(string& s1, const string& s2) {unordered_set<char> removeSet(s2.begin(), s2.end()); // Step 1: 用哈希表存储 s2 中所有字符int writeIndex = 0; // Step 2: 记录写入位置for (int i = 0; i < s1.size(); i++) { // Step 3: 遍历 s1if (!removeSet.count(s1[i])) { // Step 4: 如果 s1[i] 不在 s2 中s1[writeIndex++] = s1[i]; // Step 5: 把 s1[i] 写入当前位置}}s1.erase(writeIndex); // Step 6: 删除剩余部分
}int main() {string s1, s2;cin >> s1 >> s2;dele(s1, s2);  // 调用删除函数cout << s1 << endl;  // 输出修改后的 s1return 0;
}

文章转载自:

http://XXQHwX7R.xmxbm.cn
http://AmIkcIJd.xmxbm.cn
http://5mEpMHbl.xmxbm.cn
http://RwTL4vMP.xmxbm.cn
http://MyxFvoQ2.xmxbm.cn
http://Bg98Kr0K.xmxbm.cn
http://1gwTAR6m.xmxbm.cn
http://cqVlriUe.xmxbm.cn
http://EEMkYCTu.xmxbm.cn
http://rX6as0NS.xmxbm.cn
http://o4Sq7gpZ.xmxbm.cn
http://PaOy4UYN.xmxbm.cn
http://6yFvKrSK.xmxbm.cn
http://dzHKwltU.xmxbm.cn
http://dbYReCVh.xmxbm.cn
http://qwm1z7xV.xmxbm.cn
http://znnYe5Ha.xmxbm.cn
http://r0XW60lf.xmxbm.cn
http://B7ino9eu.xmxbm.cn
http://rBWB0qM8.xmxbm.cn
http://3LrhyZjr.xmxbm.cn
http://LeCv3oBU.xmxbm.cn
http://hJWtWT3S.xmxbm.cn
http://gLQOU2UO.xmxbm.cn
http://maMS81M2.xmxbm.cn
http://D49Evw6p.xmxbm.cn
http://NUkiPNsp.xmxbm.cn
http://AeM3CXiz.xmxbm.cn
http://Q4BpNxDz.xmxbm.cn
http://3O9CckWz.xmxbm.cn
http://www.dtcms.com/wzjs/700920.html

相关文章:

  • 做网站常用字体温州网页设计
  • 招标公司网站建设方案wordpress设置权限777
  • 网站建设公司推荐理由河源市住房城乡和建设局网站
  • 郑州网站建设注意事项山东华邦建设网站首页
  • c 如何做网站池州网站建设怎么样
  • 会做网站开发 但是不会二次开发手机上怎么上传网站吗
  • 做网站菠菜什么意思湖南在建工程查询
  • 江苏军民融合网站建设做网站的项目介绍
  • 网站建设博客一些免费的网站
  • 网站排名降级的原因有哪些网站的权限管理怎么做
  • 网站页脚的信息都有什么如何做简易网站
  • 重庆网站排名公司wordpress增加js效果
  • 做网站空间不给账号密码wordpress网站网页加密
  • 网站搭建北京深圳市南山区做网站的小公司
  • 企业网站建设中存在的问题分析网站如何推广营销
  • 网站 asp.net php想自己在家做外贸网站
  • 数据库在网站建设中的作用网站怎么做背景
  • 荷兰网站域名做招聘网站
  • 织梦dedeeims网站打不开网站建设的费用是多少
  • 淄博网站制作定制广告传媒公司起名大全最新
  • 织梦网站转移服务器四川在线城市论坛
  • 杭州建站价格网站开发维护员挣钱吗
  • 厂房出租做推广什么网站好如何在百度上搜索到自己的网站
  • 做网站公司职务深圳注册公司需要多少钱
  • 太原建网站的公司商标logo设计生成器免费
  • 温州建设银行官方网站手机搞笑网站模板下载安装
  • 台州cms建站系统游戏ui设计是做什么的
  • 电脑端网站和手机网站区别湖北联诺建设网站
  • 专门建站的公司简洁手机购物网站会员中心模板
  • 做网站需要什么图片wordpress用户前台删除文章