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

string常见的接口使用(3)

本章目标

1.Element access类的接口
2.Modifiers类的接口
3.String operations类的接口

1.Element access类的接口

1.1string::operator[]

在这里插入图片描述

在string中,[]被重载了.因为string的底层是一个动态开辟字符数组.
支持随机访问,遍历这些操作,同时它重载了两个函数,同时支持读写和修改的操作.
对于它的越界访问会以assert断言的方式返回
演示代码

string s5 = "dddddddddddddd";
for (int i = 0; i < s5.size(); i++)
{
	cout << s5[i] << " ";
}
cout << endl;

1.2string::at

在这里插入图片描述
它的效果与重载的[]一致.但是有所不同的是它的错误返回,它会以抛异常的方式返回.如果外层对这个异常进行捕获.那么程序仍然可以正常进行.
演示代码

for (int i = 0; i < s5.size(); i++)
{
	cout << s5.at(i) << " ";
}
cout << s5.front() << endl;
cout << s5.back() << endl;

cout << endl;

1.3back与front

back会返回最后一个这个string的字符,front会返回第一个字符
在这里插入图片描述

	cout << s5.front() << endl;
	cout << s5.back() << endl;

2.Modifiers类的接口

2.1operator+

在这里插入图片描述
operator+=这个重载会在这个string后面追加一个字符串,字符或者另一个string
演示代码

	string s6 = "ddddddddd";
	cout << s6 << endl;
	s6 += "xxxxxxxx";
	cout << s6 << endl;
	s6 += 'a';
	cout << s6 << endl;
	string s7 = "wwwwwwwww";
	cout << s6 << endl;
	s6 += s7;
	cout << s6 << endl;
	s6.append("hhhhhhhh");
	cout << s6 << endl;

2.2.append

在这里插入图片描述
append的主要功能是追加字符串.
它重载了多个版本.
分别是1.追加一个string
2.从另一个字符串的第pos个位置追加npos个字符,到当前字符,如果不给值会用npos的缺省值.
也就意味着全追加到当前字符.
3.追加一个字符串
4,追加一个字符串的前n个
5.追加n个该字符
6.追加一个迭代区间
演示代码

string s6 = "ddddddddd";
cout << s6 << endl;
string s7("ssssssss");

cout << s6 << endl;
s6.insert(s6.begin(), s7.begin(), s7.end());
cout<<s6<<endl;

	std::string str;
	std::string str2 = "Writing ";
	std::string str3 = "print 10 and then 5 more";

	// used in the same order as described above:
	str.append(str2);                       // "Writing "
	str.append(str3, 6, 3);                   // "10 "
	str.append("dots are cool", 5);          // "dots "
	str.append("here: ");                   // "here: "
	str.append(10u, '.');                    // ".........."
	str.append(str3.begin() + 8, str3.end());  // " and then 5 more"
	str.append(5, 0x2E);                // "....."

	std::cout << str << '\n';

2.3push_back

在这里插入图片描述
容器的通用命名,尾插,该方法跟顺序表尾插一样,会在这个string后面追加一个字符

string s1;
size_t old = s1.capacity();
cout << s1.capacity() << endl;
for (int i = 0; i < 100; i++)
{
	s1.push_back('x');

	if (old != s1.capacity())
	{
		cout << s1.capacity() << endl;
		old = s1.capacity();

	}
}
s1.clear();
cout << s1.size() << endl;
cout << s1.capacity() << endl;
cout << s1 << endl;

2.4insert

在这里插入图片描述
插入一个字符或者字符串或者一段迭代区间
在string这个容器中并没有提供头插.但是我们可以通过insert这个接口间接实现
它仍然提供了多个版本
我们下面提供几种最常用的方法的代码演示

string s6 = "ddddddddd";
cout << s6 << endl;
string s7("ssssssss");

cout << s6 << endl;
s6.insert(s6.begin(), s7.begin(), s7.end());

cout << s6 << endl;
s6.insert(3, "aaaaaaaaaa");

cout << s6 << endl;
s6.insert(0, 1, '%');

cout << s6 << endl;
s6.insert(s6.begin(), 'a');

cout << s6 << endl;

分别是追加一个迭代区间,
从第pos个位置插入一个字符串,
头插,
从该迭代器位置插入一个字符.

2.5 erase

在这里插入图片描述

erase是从指定位置删除该string的字符,但是该删除与resize一样,不会影响容量大小.
它提供了三个版本
第一个是从某个位置删除len个字符,如果不去传参,它就删完后面所有的
第二个删除该迭代器位置的字符
第三个是删除一块迭代区间

tring s6 = "ddddddddd";
	cout << s6 << endl;
	s6 += "xxxxxxxx";
	cout << s6 << endl;
	s6 += 'a';
	cout << s6 << endl;
	string s7 = "wwwwwwwww";
	cout << s6 << endl;
	s6 += s7;
	cout << s6 << endl;
	s6.append("hhhhhhhh");
	cout << s6 << endl;
	s6.append(s7.begin(), s7.end());
	cout << s6 << endl;
	cout << s6.size() << endl << s6.capacity() << endl;
	//s6.resize(10);
	s6.reserve(10);
	cout << s6.size() << endl << s6.capacity() << endl;
	cout << s6 << endl;
	s6.erase(20);
	cout << s6 << endl;
	cout << s6.size() << endl << s6.capacity() << endl;
	s6.erase(s6.begin());
	cout << s6 << endl;
	s6.erase(s6.begin() + 3, s6.begin() + 6);
	cout << s6 << endl;

2.6replace

在这里插入图片描述
replace的主要作用是替代用该字符,或者字符串替代
我们在这里简单介绍一个

	string str = "hello world";
	str.replace(5, 1, "%%%");
	cout << str << endl;

它会从第五个位置的空格起的一个字符,用这个字符串替代

2.7pop_back

尾删,删除一个字符,这是容器的通用写法
在这里插入图片描述

3.String operations类的接口

3.1c_str

在这里插入图片描述
c_str会返回当前string底层的那个字符串.它主要是应用于一些我们c语言的一些接口
例如文件的打开这样的函数

string s7 = "Դ.cpp";
FILE* fp = fopen(s7.c_str(), "r");
char  ch = fgetc(fp);
while (ch != EOF)
{
	cout << ch;
	ch = fgetc(fp);
}

fopen第一个要求的是const类型的字符串,而c_str这个接口会提供这个字符串
3.2find与rend
在这里插入图片描述
它会找这个字符串或者字符从第pos个位置,如果该位置不给传参的话会从头开始找.
rend就是从后往前找
测试代码

string ret;
string s1 = "test.cpp";
size_t find = s1.find('.');
if (find != string::npos)
{
	ret = s1.substr(find);
	cout << ret << endl;
}
string s2 = "Test.cpp.tar.zip";
size_t find1 = s2.rfind('.');
if (find1 != string::npos)
{
	ret = s2.substr(find1);
	cout << ret << endl;
}

3.2substr

在这里插入图片描述
substr是截取字符串,从第pos个位置开始截取len个字符
如果pos不给值会用缺省值,从头开始找,如果len不给值会直接截取pos后面的所有字符串

string  s3 = "https://gitee.com/bithange/issue-116/blob/master/25%E5%B9%B4-03%E6%9C%88-19%E6%97%A5--string/Test.cpp";
size_t pos = s3.find(':');
if (pos != string::npos)
{
	ret = s3.substr(0, pos);
	cout << ret << endl;
}
size_t pos1 = s3.find('/', pos + 3);
if (pos1 != string::npos)
{
	ret = s3.substr(pos + 3, pos1 - pos - 3);
	cout << ret << endl;
}
ret = s3.substr(pos1);
cout << ret << endl;

测试代码,以上是用一个url来进行划分成协议,域名,资源三部分.
网站时我的gitee可以关注下哈

3.3find_Frist_of

在这里插入图片描述
这个接口会屏蔽用*string中它给的那个串的字符,其他的几个类似于frist_not_of,时屏蔽除那个字符串的字符中其他的元素

#include <iostream>       // std::cout
#include <string>         // std::string
#include <cstddef>        // std::size_t

int main ()
{
  std::string str ("Please, replace the vowels in this sentence by asterisks.");
  std::size_t found = str.find_first_of("aeiou");
  while (found!=std::string::npos)
  {
    str[found]='*';
    found=str.find_first_of("aeiou",found+1);
  }

  std::cout << str << '\n';

  return 0;
}

在这里插入图片描述

std::string str("Please, replace the vowels in this sentence by asterisks.");
std::size_t found = str.find_first_not_of("aeiou");
while (found != std::string::npos)
{
	str[found] = '*';
	found = str.find_first_not_of("aeiou", found + 1);
}

std::cout << str << '\n';

在这里插入图片描述

相关文章:

  • 压缩壳学习
  • 3.21学习总结Java
  • 第27章:Ingress控制器实战:Nginx Ingress与Kong Gateway
  • 数据库系列之:Sqlserver 表开启cdc后,对应的ct表数据保存时间
  • Ligolo-ng 保姆级使用指南:新一代隧道代理工具(OSCP适用)
  • 天闻数媒名师工作室系统 fileTempDownload 存在文件读取漏洞(DVB-2025-8998)
  • 华为云Flexus L实例和X实例有啥区别?云服务器Flexus全解析
  • 105. 有向图的完全联通
  • LangChain 基础
  • 【AI News | 20250322】每日AI进展
  • C++进阶——类与对象
  • 基于物理信息强化学习的非线性系统最优控制
  • Java面试黄金宝典10
  • CSRF SSRF RCE
  • Django 生产环境静态文件处理
  • 代码随想录算法训练营第十四天(2)|151.翻转字符串里的单词
  • Python Cookbook-4.9 从字典中取值
  • 探索 Ollama:开源大语言模型平台的无限可能​
  • 《大话数据结构》学习记录----第三章线性表
  • SPI 机制与 Spring Boot AutoConfiguration 对比解析
  • 纪念苏联伟大卫国战争胜利80周年阅兵彩排,解放军仪仗队亮相
  • 联想发布超级智能体矩阵,杨元庆:美国关税影响反映在产品定价上,未来不确定性很大
  • 观察|22项达全球最优,世行为上海营商环境“盖章”
  • 全军军级以上单位新任纪委书记监委主任培训班结业
  • 娱见 | 为了撕番而脱粉,内娱粉丝为何如此在乎番位
  • 青岛双星名人集团董事长发公开信称家人逼迫交出管理权?公司回应