【C++】 —— string的使用(二)

简介: 【C++】 —— string的使用

1、operator+=   *

       库里面实现了三个+=运算符重载函数,我们在使用时就可以像内置类型那样+=;

这里可以+=一个string类类型对象、字符串(字符数组)或者一个字符。

void test4()
{
  string s1("hello ");
  string s2("world ");
  s1 += s2;
  cout << s1 << endl;
  
  char str[] = "ever";
  s1 += str;
  cout << s1 << endl;
 
  s1 += 'o';
  s1 += 'n';
  s1 += 'e';
  cout << s1 << endl;
}

2、append

       库里面实现的append感觉有点冗余;

       append可以增加string类型对象(也可以是其中的一部分)、字符串(可以是其中的一部分)、n个字符;传参也可以是迭代器。

void test5()
{
  string s1("hello ");
  string s2("world ");
  //s1.append(s2); 也可以直接添加s2的全部
  s1.append(s2, 1, 3);
  //从下标为1的位置开始,添加后面3个字符
  cout << s1 << endl;
 
  s1.append("everone");
  //s1.append("everone",4);
  //也可以这样,只添加前4个字符
  cout << s1 << endl;
 
  s1.append(3, 'x');
  //添加3个字符 'x'
  cout << s1 << endl;
}

3、push_back

push_back就是在string对象后面添加一个字符。(比较简单就不测试了)。

4、assgin

       assgin是设置string类对象的内容,(可以用同类型对象来设置(也可以是一部分)、也可以用字符串设置(或者其中一部分)、也可以将strng对象内容设置成n个字符;(也可以传迭代器))。

void test5()
{
  string s1("hello ");
  string s2("world ");
  //s1.append(s2); 
  s1.assign(s2, 1, 3);
  cout << s1 << endl;
 
  s1.assign("everone");
  //s1.append("everone",4);
  cout << s1 << endl;
 
  s1.assign(3, 'x');
  cout << s1 << endl;
}

5、insert

       insert与assgin不同,要比assgin多一个参数,这个参数pos就决定了从string对象中字符串哪个位置开始设置字符串的内容。

void test5()
{
  string s1("hello ");
  string s2("world ");
  //s1.append(s2); 
  s1.insert(3, s2, 1, 3);
  cout << s1 << endl;
 
  s1.insert(8, "everone");
  //s1.append("everone",4);
  cout << s1 << endl;
 
  s1.insert(15, 3, 'x');
  cout << s1 << endl;
}

6、erase

       erase是删除string对象中字符串的数据,(删除pos位置后面的len和字符);如果不传参就是全部删除(如果只是不传len的参数,就默认删除pos后面所有的数据)。

void test6()
{
  string s1("hello world !!!");
  cout << s1 << endl;
  s1.erase(11, 3);
  cout << s1 << endl;
  s1.erase(5);
  cout << s1 << endl;
  s1.erase();
  cout << s1 << endl;
}

7、replace

replace 替换string对象字符串中的数据;

函数的前两个参数,就是指需要替换的位置(pos位置后面的len个字符)。

       可以替换成string类类型对象(也可以是一部分)、字符串(也可以是一部分)、n个字符或者迭代器指向的区间。

void test7()
{
  string s1("Hello World ");
  string s2("everone");
  cout << s1 << endl;
  s1.replace(6, 5, s2);
  cout << s1 << endl;
 
  s1.replace(6, 5, "I Love");
  cout << s1 << endl;
 
  s1.replace(6, 5, 3, '*');
  cout << s1 << endl;
}

8、swap

       swap是库里面实现的一个函数(交换两个string类类型对象)。

void test8()
{
  string s1("hello world");
  string s2("I Love you");
  cout << "s1: " << s1 << endl;
  cout << "s2: " << s2 << endl;
  s1.swap(s2);
  cout << "s1: " << s1 << endl;
  cout << "s2: " << s2 << endl;
}

       3.4、String operations 字符串操作

       字符串操作,主要操作有返回字符串指针、查找、拷贝、获得子串等。(这里就使用其中的一部分)。

1、c_str   *

       c_str返回string对象里的字符串指针。(需要注意的就是返回的指针是const修饰的,必须用const指针接受)。

void test9()
{
  string s1("Hello World");
  const char* s = s1.c_str();
  cout << s << endl;
}

2、find   *

       find查找, 在string对象里查找指定字符(string类类型对象、字符串、字符),也可以指定区间进行查找。找到就返回下标;没有找到返回npos。

void test9()
{
  string s1("Hello World");
  string s2("Hello");
  size_t f1 = s1.find(s2);
  size_t f2 = s1.find("Love");
  size_t f3 = s1.find('o');
 
  cout << f1 << endl;
  cout << f2 << endl;
  cout << f3 << endl;
}

3、substr   *

       substr获得string对象字符串中的子串。这结合上面的find,

实现将一个网址的协议、域名以及资源分开。

void test10()
{
  string s1("https://blog.csdn.net/LH__1314?type=blog");
  size_t f1 = s1.find("://", 0);
  string protocol = s1.substr(0, f1);
 
  size_t f2, f3;
  f2 = s1.find('/', f1 + 3);
  string domain = s1.substr(f1 + 3, f2 - (f1 + 3));
  string resource = s1.substr(f2 + 1);
 
  cout << protocol.c_str() << endl;
  cout << domain.c_str() << endl;
  cout << resource.c_str() << endl;
}

       3.5、Inerator

       inerator就是所谓的迭代器,在string中迭代器作用没有那么大,(甚至可以将它理解为指针(但迭代器不是指针))。

在使用这些函数之前,要先知道一种类型,迭代器 iterator

string::iterator it;

因为在其他容器里也存在迭代器,所以定义时要指定类域。

1、begin、end

       这里的两个函数返回的都是迭代器,begin返回的是起始位置,end返回的是终止位置。

       这里库里面还实现了const修饰的函数,const修饰的迭代器类型有所不同

string::const_iterator it;

这里直接使用:

void test11()
{
  string s1("I Love You");
  string::iterator it = s1.begin();
  while (it != s1.end())
  {
    cout << *it << " ";
    it++;
  }
  cout << endl;
}

2、范围for

有了迭代器,我们就可以实现一种语法 范围for

void test11()
{
  string s1("I Love You");
  for (auto ch : s1)
  {
    cout << ch << " ";
  }
}

到这里,string类的基本使用就结束了。

感谢各位大佬支持并指出问题,

                       如果本篇内容对你有帮助,可以一键三连支持以下,感谢支持!!!

相关文章
|
25天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
17天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
4天前
|
JSON 自然语言处理 数据管理
阿里云百炼产品月刊【2024年9月】
阿里云百炼产品月刊【2024年9月】,涵盖本月产品和功能发布、活动,应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。
阿里云百炼产品月刊【2024年9月】
|
1天前
|
人工智能 Rust Java
10月更文挑战赛火热启动,坚持热爱坚持创作!
开发者社区10月更文挑战,寻找热爱技术内容创作的你,欢迎来创作!
256 12
|
19天前
|
人工智能 IDE 程序员
期盼已久!通义灵码 AI 程序员开启邀测,全流程开发仅用几分钟
在云栖大会上,阿里云云原生应用平台负责人丁宇宣布,「通义灵码」完成全面升级,并正式发布 AI 程序员。
|
21天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2582 22
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
3天前
|
存储 人工智能 搜索推荐
数据治理,是时候打破刻板印象了
瓴羊智能数据建设与治理产品Datapin全面升级,可演进扩展的数据架构体系为企业数据治理预留发展空间,推出敏捷版用以解决企业数据量不大但需构建数据的场景问题,基于大模型打造的DataAgent更是为企业用好数据资产提供了便利。
169 2
|
1天前
|
编译器 C#
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
101 65
|
21天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1578 16
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
5天前
|
Linux 虚拟化 开发者
一键将CentOs的yum源更换为国内阿里yum源
一键将CentOs的yum源更换为国内阿里yum源
257 2