蓝桥杯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,初始化为另外一个字符串s1cout << 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;

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

进制之间转换

「 一、十进制 二进制 」 1.十进制转二进制&#xff1a;一直除以2直到商为0&#xff0c;再反向取余数。 例&#xff1a;13&#xff08;十进制&#xff09;转1101&#xff08;二进制&#xff09; 2.二进制转十进制:最后一位数开始是2^0&#xff0c;然后一直按照指数递增的方式…

3b1b线性代数基础

零、写在前面 3b1b之前没认真看&#xff0c;闲了整理整理。 一、向量 学习物理的时候&#xff0c;向量是空间中的箭头。由其方向和长度决定。 学习数据结构的时候&#xff0c;向量是有序的数字列表。向量的每一维度有着不同含义。 线性代数中&#xff0c;我们通常认为**向量…

Consul持久化配置报错1067---consul_start

报错都是文件写的有问题或者格式问题&#xff0c;直接复制我的这个改改地址就行 先创建文本文件consul_start.txt--->再复制代码保存---->再把.txt改成.bat 持久化存储的地址在&#xff1a;mydata 注&#xff1a;D:\consul\consul_1.20.2_windows_386改成自己consul的…

【Unity3D】Unity混淆工具Obfuscator使用

目录 一、导入工具 二、各种混淆形式介绍 2.1 程序集混淆 2.2 命名空间混淆 2.3 类混淆 2.4 函数混淆 2.5 参数混淆 2.6 字段混淆 2.7 属性混淆 2.8 事件混淆 三、安全混淆 四、兼容性处理 4.1 动画方法兼容 4.2 GUI方法兼容 4.3 协程方法兼容 五、选项 5.1 调…

JavaScript学习笔记(3)

一.BOM对象 BOM的全称是Browser Object Model,翻译过来是浏览器对象模型。也就 是JavaScript将浏览器的各个组成部分封装成了对象。我们要操作浏览器的部分功能&#xff0c;可以通过操作 BOM对象的相关属性或者函数来完成。例如&#xff1a;我们想要将浏览器的地址改为 http:/…

Hive之加载csv格式数据到hive

场景&#xff1a; 今天接了一个需求&#xff0c;将测试环境的hive数据导入到正式环境中。但是不需要整个流程的迁移&#xff0c;只需要迁移ads表 解决方案&#xff1a; 拿到这个需求首先想到两个方案&#xff1a; 1、将数据通过insert into语句导出&#xff0c;然后运行脚本 …

stm32f103 单片机(一)第一个工程

先看一个简单的 系统上已经安装好了keil5 与ARM包&#xff0c;也下载好了STM32固件库 新建一个工程&#xff0c;添加三个组 加入如下文件 在options 里作如下配置 准备在main.c 中写下第一个实验&#xff0c;点亮一个小灯。 像51单片机一样直接对引脚赋值是行不通的 在…

ChromeOS 132 版本更新

ChromeOS 132 版本更新 1. 企业定制化 Chrome Web Store 管理员现在可以使用新设置定制 Chrome Web Store 以适应他们管理的用户&#xff0c;包括以下功能&#xff1a; 添加公司标志添加首页横幅和自定义公告策划扩展集合实施基于类别的控制 这些设置可以通过管理员控制台进…

绘制决策树的尝试1

代码复制 import pydotplus 复制 - 这一行代码用于导入pydotplus模块&#xff0c;这是一个用来在Python中创建图形的工具。2. python from IPython.display import Image 这一行代码用于从IPython显示模块中导入Image类&#xff0c;它允许我们在Jupyter笔记本中显示图像。…

知识图谱结合大模型用于聊天分析

知识图谱结合大模型在聊天分析中的应用主要体现在以下几个方面&#xff1a; 1. 提升对话理解和生成能力 知识图谱&#xff08;KG&#xff09;与大模型&#xff08;LLM&#xff09;的结合能够显著增强对话系统的语义理解能力和生成能力。例如&#xff0c;通过知识图谱的结构化…

堆的补充--Top-K问题

我们今天来学习二叉树的链式存储&#xff0c;但是在我们学习之前我们先来看一下我们昨天学习的顺序存储&#xff1a;二叉树&#xff1b; 我们之前说堆有两种方法&#xff1a; 1.向下调整建堆&#xff1a; 我们找到最后一个非叶子结点&#xff0c;把他作为起始下标&#xff1…

放大器版图绘制全流程

版图的构成主要分为四部分。对于一般的电路来说&#xff0c;重点关注前三部分第一部分是电路中所对应的mos管电容电阻这些基本器件&#xff0c;一般都是由工艺产商提供标准的元件版图&#xff0c;这部分是我们不需要太关心的。第二部分是对器件进行连线第三部分是衬底的连接&am…

我谈概率论与数理统计的知识体系

学习概率统计二十多年后&#xff0c;在廖老师的指导下&#xff0c;厘清了各章之间的关系。本来就是一条线两个分支&#xff0c;脉络很清晰。 分支一&#xff1a;从随机现象到样本空间到随机事件再到概率。 从随机事件到随机变量&#xff1a;为了进行定量的数学处理&#xff0…

群晖Cloud Sync如何实现一键同步备份让数据更安全高效

文章目录 前言1. 群晖NAS安装Cloud Sync1.1 安装和配置 Cloud Sync 2. 功能演示3. 群晖安装cpolar内网穿透3.1 配置Cloud Sync公网访问地址 4. 配置固定公网地址 前言 在数字化时代&#xff0c;数据的管理和备份成为了我们日常生活中的一个关键任务。无论是个人还是企业&#…

探索Linux中的进程控制:从启动到退出的背后原理

个人主页&#xff1a;chian-ocean 文章专栏-Linux 前言&#xff1a; 进程控制是操作系统对进程的创建、运行、调度、中止等活动进行管理和协调的行为。它是操作系统中至关重要的一部分&#xff0c;保证多任务处理环境下的资源分配和系统稳定性。 进程创建 fork( ) fork() 调…

密码无关认证:金融机构如何解决密码问题

密码安全问题&#xff0c;依然是金融行业面临的重大挑战。尽管密码简单易用&#xff0c;但许多金融机构仍然依赖这种方式进行身份认证。幸运的是&#xff0c;随着技术的发展&#xff0c;密码无关认证已经成为一种更加安全、便捷的选择&#xff0c;它能够为数字银行带来更好的用…

HarmonyOS基于ArkTS卡片服务

卡片服务 前言 Form Kit&#xff08;卡片开发框架&#xff09;提供了一种在桌面、锁屏等系统入口嵌入显示应用信息的开发框架和API&#xff0c;可以将应用内用户关注的重要信息或常用操作抽取到服务卡片&#xff08;以下简称“卡片”&#xff09;上&#xff0c;通过将卡片添加…

运算放大器应用电路设计笔记(六)

6.1输出失调电压发生的原因与计算 6.1.1用噪声增益进行评价 若运算放大器两个输入端接地&#xff0c;则理想运放输出为零&#xff0c;但实际的运放输出不为零&#xff0c;有一定的直流输出电压。这种直流电压称为输出失调电压。发生的原因是&#xff0c;运算放大器内部元件尤…

【Vim Masterclass 笔记25】S10L45:Vim 多窗口的常用操作方法及相关注意事项

文章目录 S10L45 Working with Multiple Windows1 水平分割窗口2 在水平分割的新窗口中显示其它文件内容3 垂直分割窗口4 窗口的关闭5 在同一窗口水平拆分出多个窗口6 关闭其余窗口7 让四个文件呈田字形排列8 光标在多窗口中的定位9 调节子窗口的尺寸大小10 变换子窗口的位置11…

【算法】经典博弈论问题——巴什博弈 python

目录 前言巴什博弈(Bash Game)小试牛刀PN分析实战检验总结 前言 博弈类问题大致分为&#xff1a; 公平组合游戏、非公平组合游戏&#xff08;绝大多数的棋类游戏&#xff09;和 反常游戏 巴什博弈(Bash Game) 一共有n颗石子&#xff0c;两个人轮流拿&#xff0c;每次可以拿1~m颗…