蓝桥杯lesson3---string的使用

embedded/2025/1/24 14:44:24/

🌈个人主页:羽晨同学 

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

 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.ppmy.cn/embedded/156594.html

相关文章

【Java计算机毕业设计】基于Springboot+Vue汽车租赁管理系统【源代码+数据库+LW文档+开题报告+答辩稿+部署教程+代码讲解】

源代码数据库LW文档&#xff08;1万字以上&#xff09;开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统&#xff1a;Window操作系统 2、开发工具&#xff1a;IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…

基于Java Web的网上房屋租售网站

内容摘要 本毕业设计题目为《基于Java Web的网上房屋租售网站》&#xff0c;是在信息化时代下充分利用互联网对传统房屋租售方式进行创新&#xff0c;在互联网上进行房屋租售突破了传统方式的局限性。对于房屋租售的当事人都提供了极大的便利。本稳针对了实际用户需求&#xf…

C++—21、C++ 中构造函数Constructors

一、什么是构造函数&#xff1f; 构造函数是一个特殊的方法&#xff0c;它在类每次实例化创建对象的时侯自动调用&#xff0c;用于初始化对象。 构造函数的名字必须与类名完全相同&#xff0c;并且没有返回类型&#xff0c;甚至连void也没有。 构造函数的目的是确保对象在创…

C语言初阶牛客网刷题——HJ73 计算日期到天数转换【难度:简单】

1. 题目描述——HJ73 计算日期到天数转换 牛客网OJ题链接 描述 每一年中都有 12 个月份。其中&#xff0c;1,3,5,7,8,10,12 月每个月有 31 天&#xff1b; 4,6,9,11 月每个月有 30 天&#xff1b;而对于 2 月&#xff0c;闰年时有29 天&#xff0c;平年时有 28 天。 现在&am…

Android节点读写实现

在工作中&#xff0c;我们会对一些节点进行读写操作。比如控制闪光灯&#xff0c;指示灯;降噪芯片开关或其低功耗开关&#xff0c;因为项目中常用到&#xff0c;在此记录&#xff0c;备忘&#xff5e; 直接上代码&#xff0c;想用直接拿去 一 监听某个节点的写入值的反馈 有些…

python将txt文件转成csv文件

1.才开始使用Jupyter Notebook,发现用此软件做些实践性的工作还是非常方便的,在此强烈推荐 2)网上下个txt文本文件,为了想做后续词云统计方便,果断转换为csv,代码如下: import csv data[] with open(C:\\Users\\Administrator\\Desktop\\修行大智慧\\《道德经》原文全文&#…

大数据技术笔记

大数据技术概述 本章初步介绍大数据领域技术涉及的一些基础理论&#xff0c;如分布式、存储、网络等知识。 分布式理论 大数据意味数据量大&#xff0c;那么存储和计算数据的节点就不大可能只有一个&#xff0c;而是采用分而治之的思想在多个节点中存储和计算&#xff0c;提…

springboot图书馆管理系统前后端分离版本

springboot图书馆管理系统前后端分离版本, 系统供的功能全部都可以使用 这是一个成品,系统的架构包括代码的层次都比较清晰而且功能比较丰富大家可以拿到手里改改界面改改文字的描述细节稍微修改一下就可以完成自己的毕业设计了,也可二次开发 系统特性 技术先进:使用了最新…