蓝桥杯lesson3---string的使用

🌈个人主页:羽晨同学 

💫个人格言:“成为自己未来的主人~” 

 string的概念

string字符串是一种更加高级的封装,string字符串中包含了大量的方法,这些方法使得字符串的操作变得更加简单,string的使用,往往贯穿于整个蓝桥杯生涯中。

C++中将字符串直接作为一种类型,也就是string类型,使用string类型创建的对象就是C++的字符串。

使用C++中提供的string时,必须添加头文件<string>

	string s1;
	string s2 = "abc";

string的常见操作

2.1创建字符串

#define _CRT_SECURE_NO_WARNINGS
#include<string> //添加string头文件
#include<iostream>
using namespace std;
int main()
{
	string s1;
	string s2 = "abc";
	cout << s1 << endl;
	cout << s2 << endl;

	return 0;
}

其中s1是空白字符串,s2是创建了abc的字符串。

  1. s1表示创建了一个空字符串,相当于创建整型int a,但未给a一个初始值。
  2. string s2表示创建一个字符串s2,它的内容是"hello world",要注意s2中的字符串不再以\0作为结束标志。 

 

除了上面的创建字符串的写法外,还有其他一些创建字符串的方式。

	string s("hello world");
	string s1 = s;//用一个现成的字符串s,初始化为另外一个字符串s1

当然C++中的string创建的字符串和char类型的数组所表示的字符串还有一个区别,string类型的字符串对象可以直接赋值。

#define _CRT_SECURE_NO_WARNINGS
#include<string> //添加string头文件
#include<iostream>
using namespace std;
int main()
{
	//string s1;
	//string s2 = "abc";
	//cout << s1 << endl;
	//cout << s2 << endl;
	string s("hello world");
	string s1 = s;//用一个现成的字符串s,初始化为另外一个字符串s1
	cout << s1 << endl;
	return 0;
}

cin的方式

可以直接使用cin给string类型的字符串输入一个字符串的数据。

int main()
{
	string s;
	cin >> s;
	cout << s << endl;
	return 0;
}

这个其实适用于不带空格的字符串,但如果输入的是带空格的字符串呢,我们来看看。

你看,这样子就不可以了。

那么,我们怎么可以读取空格呢?,解决的办法就是getline

getline

第一种getline函数以换行符("\n")作为字符串的结束标志,它的一般格式为:

	getline(cin, string str);

这种形式的getline函数从输入流中读取文本,直到遇到换行符('\n')为止,然后将读取的文本(不包括换行符)存储到指定的string类型的变量str中。

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string name;
	getline(cin,name);
	cout<<name<<endl;
	
	return 0;	
}

第二种就是getlin函数允许用户自定义结束语法

#include<iostream>
#include<string>
using namespace std;
int main()
{
//	string name;
//	getline(cin,name);
//	cout<<name<<endl;
//	
//	return 0;	

	string name;
	getline(cin,name,'q');
	cout<<name<<endl;
	return 0;
}

你看,这样子就是以q作为了结束标志。

size()

string中提供了size()函数用于获取字符串长度。

	string s;
	string s1="hello";
	string s2="hello world";
	string s3="12ab!=     ";
	cout<<"s:"<<s.size()<<endl;
	cout<<"s1:"<<s1.size()<<endl;	
	cout<<"s2:"<<s2.size()<<endl;
	cout<<"s3:"<<s3.size()<<endl;

接下来,我们用这个来遍历整个字符串


	string s="abcdef";
	int i=0;
	for(i=0;i<s.size();i++)
	{
		cout<<s[i]<<" ";
	}

注意string类型的字符串是可以通过下标来进行访问的。

迭代器

 迭代器是一种对象,它可以用来遍历容器,迭代器的作用类似于指针,或者数组下标,这就意味着,如果我们想要访问迭代器所指向的值,我们需要解引用。

begin()

begin():返回指向字符串第一个字符的迭代器,需要一个迭代器的变量来接收

end()

 end():返回指向字符串最后一个字符的下一个位置的迭代器(该位置不属于字符串)

迭代器是可以进行大小比较的,也可以进行+或者-整数运算的。

同一个容器的两个迭代器也可以相减,相减结果的绝对值,是两个迭代器中间元素的个数

	string s="abcdef";
	string::iterator it1=s.begin();
	string::iterator it2=s.end();
	cout<<(it1<it2)<<endl;
	cout<<abs(it1-it2)<<endl;

正序遍历

	string s="abcdef";
	for(auto it =s.begin();it!=s.end();it++)
	{
		cout<<*it<<" ";
	}
	cout<<endl;
	for(string::iterator it=s.begin();it!=s.end();it++)
	{
		cout<<*it<<" ";
	}
		

逆序遍历

	string s="abcdef";
	for(auto it =s.end()-1;it!=s.begin()-1;it--)
	{
		cout<<*it<<" ";
	}
	cout<<endl;
	for(string::iterator it=s.end()-1;it!=s.begin()-1;it--)
	{
		cout<<*it<<" ";
	}

使用迭代器找到元素之后,改变迭代器指向的元素,是可以直接改变字符串内容的。

	string str="abcdef";
	cout<<str<<endl;
	for(auto i=str.begin();i<str.end();i++)
	{
		*i='X';
	}
	cout<<str<<endl;

push_back()

	string s;
	s.push_back('h');
	s.push_back('e');	
	s.push_back('l');
	s.push_back('l');
	s.push_back('o');
	cout<<s<<endl;

字符串的+和+=操作

push_back()是用于在字符串后面添加一个字符,然而部分情况下我们需要向原有的字符串后继续添加字符串。

其实string类型的字符串是支持+和+=运算的,这里的本质是string中重载了operator+=这个操作符

我们来看下下面的例子:

	string s="hello";
	s+="world";
	cout<<s<<endl;
	string s1="hello";
	cout<<s1+"world"<<endl;;
	s1=s1+="world";
	cout<<s1<<endl;
	string s2="hello";
	s2="world"+s2;
	cout<<s2<<endl;

pop_back()

pop_back()用于删除字符串尾部的一个字符,这个成员函数是在C++11标准中引入的,有的编译器可能不支持。

	string s="hello";
	cout<<s<<endl;
	s.pop_back();
	cout<<s<<endl;
	s.pop_back();
	cout<<s<<endl;

 当字符串中没有字符的时候,再调用pop_back(),是会发生报错的。

你看,devC++中直接崩溃了

insert

如果我们需要在字符串中间的某个位置插入一个字符串,这个时候我们就得掌握一个函数就是insert;

函数原型如下:

	string& insert(size_t pos,const string& str);//pos前面插入一个string的字符串
	string& insert(size_t pos,const char*s);//pos前面插入一个C风格的字符串
	string& insert(size_t pos,size_t n,char c);//pos位置前面插入n个字符c
	 
	string s="abcdefghijk";
	string str="xxx";
	cout<<s<<endl;
	s.insert(3,str);
	cout<<s<<endl;
	const char*c="111";	
	s.insert(3,c);
	cout<<s<<endl;
	s.insert(3,3,'4');
	cout<<s<<endl;

find()

find()函数用于查找字符串中指定子串/字符,并返回子串/字符第一次出现的位置。

返回值

若找到,返回子串/字符在字符串中第一次出现的起始下标位置。

若未找到,返回npos

	string s="hello world hello everyone";
	string str="llo";
	size_t n=s.find(str);
	cout<<n<<endl;
	n=s.find("llo");
	cout<<n<<endl;
	n=s.find("llo",n+1);
	cout<<n<<endl;

第二种用法

	size_t n=s.find("word",0,3);//在s中,0这个指定位置开始查找“world中的前3个字符 
	cout<<n<<endl;
	n=s.find("everyone",n+1,5);
	

查找不到的情况

	string s="hello world hello everyone";	
	string str="bit";
	size_t n=s.find(str);
	cout<<n<<endl;

substr()

substr()用于截取字符串中指定位置指定长度的子串

函数原型如下:

	string substr(size_t pos =0,size_t len=npos) const;	
	
	string s="hello world hello everyone";
	string s1=s.substr(7);
	cout<<s1<<endl;
	string s2=s.substr(7,6);
	cout<<s2<<endl;

to_string

tostring函数可以将数字转换成字符串

	string pi=to_string(3.14159);
	cout<<pi<<endl;

好了,今天的内容就到这里,我们明天再见。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/958289.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Arduino D1 通过 Wi-Fi 控制 LED

Arduino D1 通过 Wi-Fi 控制 LED 硬件连接 将 LED 的正极&#xff08;长脚&#xff09;连接到 Arduino D1 的 D1 引脚。将 LED 的负极&#xff08;短脚&#xff09;通过一个电阻&#xff08;例如 220 欧姆&#xff09;连接到 Arduino D1 的 GND 引脚。 安装必要的库 在 Ard…

大模型 / 智能体在智能运维领域的应用总结与发展趋势概述

智能体 智能运维 &#xff1f; 回顾大模型的发展 大模型的发展在过去两年间呈现出爆炸式的增长&#xff0c;成为推动人工智能领域快速进步的关键力量。 2023年3月&#xff1a;百度发布了其知识增强的大语言模型产品“文心一言”&#xff0c;这标志着国内AI大模型产业竞争的…

Unity中在UI上画线

在UI中画一条曲线 我封装了一个组件,可以实现基本的画线需求. 效果 按住鼠标左键随手一画. 用起来也很简单,将组件挂到空物体上就行了,红色的背景是Panel. 你可以将该组件理解为一个Image,只不过形状更灵活一些罢了,所以它要放在下面的层级(不然可能会被挡住). 代码 可以…

【自然语言处理(NLP)】介绍、发展史

文章目录 介绍发展史1. 规则驱动时期&#xff08;20世纪50年代-80年代&#xff09;技术特点标志性成果 2. 统计方法兴起&#xff08;1990年代-2000年代&#xff09;技术特点标志性成果 3. 神经网络复兴&#xff08;2010年代初至今&#xff09;技术特点标志性成果 4. 集成与应用…

【书籍连载】《软件测试架构实践与精准测试》| 川模型的价值

各位软件领域的精英们&#xff0c;今天小编邀请你继续深入学习《软件测试架构实践与精准测试》。 《软件测试架构实践与精准测试》是作者李龙&#xff08;安畅检测首席技术专家&#xff09;基于软件测试“川模型”的著作。本书结合作者首次提出的软件测试新的模型“川模型”测试…

RPC是什么?和HTTP区别?

RPC 是什么&#xff1f;HTTP 是什么&#xff1f; 作为一个程序员&#xff0c;假设我们需要从A电脑的进程发送一段数据到B电脑的进程&#xff0c;我们一般会在代码中使用 Socket 进行编程。 此时&#xff0c;可选性一般就是 TCP 和 UDP 二选一&#xff0c;由于 TCP 可靠、UDP…

08.七种排序算法实现(C语言)

目录 一.排序的基本概念 1.1 排序的概念 1.2 常见的排序算法 二.常见排序算法的实现 2.1 插入排序&#xff08;直接&#xff09; 1.基本思想 2.直接插入排序的特性 3.代码实现 2.2 希尔排序 1.基本思想 2.希尔插入排序的特性 3.代码实现 2.3 选择排序 1.基本思想 2…

Jmeter使用Request URL请求接口

简介 在Jmeter调试接口时&#xff0c;有时不清楚后端服务接口的具体路径&#xff0c;可以使用Request URL和cookie来实现接口请求。以下内容以使用cookie鉴权的接口举例。 步骤 ① 登录网站后获取具体的Request URL和cookie信息 通过浏览器获取到Request URL和cookie&#…

Apache Tomcat文件包含漏洞复现(详细教程)

1.漏洞原理 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;其安装后会默认开启ajp连接器&#xff0c;方便与其他web服务器通过ajp协议进行交互。属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发…

fpga学习入门 串口rs232回环

奇偶检验位这里是省略了 做好回环后可以使用上位机做回环测试&#xff0c;top文件写的方式就是将rx&#xff08;fpga端&#xff09;接受到的模块&#xff08;pc端&#xff09;tx发送出去&#xff0c;这两个端口用杜邦线连接&#xff0c;同理模块的rx连接fpga的tx&#xff0c;…

KETTLE-SAP抽数报错RFC_ERROR_SYSTEM_FAILURE

KETTLE调SAP 合并ECCS相关的函数时报错 2025/01/23 17:56:02 - SAP input.0 - ERROR (version 8.2.0.0-342, build 8.2.0.0-342 from 2018-11-14 10.30.55 by buildguy) : Unexpected error 2025/01/23 17:56:02 - SAP input.0 - ERROR (version 8.2.0.0-342, build 8.2.0.0-3…

HTTP 配置与应用(局域网)

想做一个自己学习的有关的csdn账号&#xff0c;努力奋斗......会更新我计算机网络实验课程的所有内容&#xff0c;还有其他的学习知识^_^&#xff0c;为自己巩固一下所学知识&#xff0c;下次更新HTTP 配置与应用&#xff08;不同网段&#xff09;。 我是一个萌新小白&#xf…

C++AVL树(一)详解

文章目录 AVL树概念AVL树的插入平衡因子的更新旋转的规则左单旋右单旋抽象的情况h0h1h 2h 3 AVL树 概念 AVL树是一棵平衡二叉查找树&#xff0c;AVL树是空树&#xff0c;保证左右子树都是AVL树&#xff0c;AVL树要求高度差的绝对值不超过1&#xff0c;因为最好情况是1&#…

MCP Server 开发实战:无缝对接 LLM 和 Elasticsearch

在一文带你入门 MCP&#xff08;模型上下文协议&#xff09;文章中&#xff0c;我们快速介绍了 MCP 的基本概念&#xff0c;并且通过一个示例让读者初步感受到了 MCP 的强大能力。本文将进一步深入&#xff0c;带领读者一步步学习如何开发一个完整的 MCP Server。本文的完整代码…

Kubernetes v1.28.0安装dashboard v2.6.1(k8s图形化操作界面)

准备工作 Kubernetes v1.28.0搭建教程请参考&#xff1a;Kubernetes v1.28.0集群快速搭建教程-CSDN博客 查看当前集群nodes都是ready状态 查看当前pods都是running状态 下载并修改配置文件 下载 recommended.yaml &#xff0c;下载好之后&#xff0c;进入文件编辑 下载地址…

设计模式的艺术-职责链模式

行为型模式的名称、定义、学习难度和使用频率如下表所示&#xff1a; 1.如何理解职责链模式 最常见的职责链是直线型&#xff0c;即沿着一条单向的链来传递请求。链上的每一个对象都是请求处理者&#xff0c;职责链模式可以将请求的处理者组织成一条链&#xff0c;并让请求沿着…

通过脚本申请免费SSL证书(泛解析SSL证书)

参考来源 1.https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E 2.https://github.com/acmesh-official/acme.sh/wiki/dns-manual-mode 3.https://github.com/acmesh-official/acme.sh/wiki/dnsapi 安装 acme.sh 配置账号 配置默认CA 安装依赖 # Cento…

CrypTen项目实践

CrypTen是一个用于安全多方计算&#xff08;MPC&#xff09;的python库&#xff0c;基于PyTorch构建。 CrypTen facebookresearch/CrypTen: A framework for Privacy Preserving Machine Learning 目录 一、实践准备 二、实践操作 1.下载WSL 2.下载代码 3.创建虚拟环境&…

【CS61A 2024秋】Python入门课,全过程记录P3(Week5 Sequences开始,更新于2025/1/23)

文章目录 关于基本介绍&#x1f44b;新的问题Week5Mon Sequences阅读材料 关于 个人博客&#xff0c;里面偶尔更新&#xff0c;最近比较忙。发一些总结的帖子和思考。 江湖有缘相见&#x1f91d;。如果读者想和我交个朋友可以加我好友&#xff08;见主页or个人博客&#xff0…

Jenkins-基于Role的鉴权机制

jenkins自带了一些全局性的安全配置。 但无法通过job等相对细粒度的来控制使用者的权限。但它可以借助相关的插件实现细颗粒的权限控制。 插件&#xff1a; Role-based Authorization Strategy 需要在configure global security中配置授权策略如下&#xff1a; 保存后&#x…