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

蓝桥杯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;

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


http://www.kler.cn/a/516415.html

相关文章:

  • 中国综合算力指数(2024年)报告汇总PDF洞察(附原数据表)
  • PHP礼品兑换系统小程序
  • Autosar CP中SWC收发LIN消息的函数调用流程原理解析
  • ES6 简单练习笔记--变量申明
  • SentencePiece和 WordPiece tokenization 的含义和区别
  • AI守护煤矿安全生产:基于视频智能的煤矿管理系统架构解析
  • RabbitMQ 匿名队列详解
  • Elasticsearch的经典面试题及详细解答
  • CrypTen项目实践
  • 人工智能学习(一)之python入门
  • STM32的ADC工作模式
  • Linux 主流桌面环境及其默认应用大横评
  • 面向对象和面向过程的区别
  • 从ChatGPT热潮看智算崛起
  • Unity3D 动态骨骼性能优化详解
  • 对grid布局有哪些了解【css】
  • el-dialog内容大于高度时可滑动
  • python自动生成pg数据库表对应的es索引
  • Day21-【软考】短文,计算机网络开篇,OSI七层模型有哪些协议?
  • C++ 通过域名获取服务器ip(跨平台)
  • 【2024 CSDN博客之星】个人收获分享
  • OpenCV文字绘制支持中文显示
  • 57.有两个参数的Command C#例子 WPF例子
  • 对于低代码与开发框架的一些整合[01]
  • PaSa:基于大语言模型的综合学术论文搜索智能体
  • Langchain+讯飞星火大模型Spark Max调用