蓝桥杯lesson3---string的使用

news/2025/1/24 22:28:43/

🌈个人主页:羽晨同学 

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

 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/news/1565895.html

相关文章

LLaMA Factory框架微调GLM-4大模型

摘要&#xff1a;本论文详细阐述了在 Ubuntu 24.04 系统环境下&#xff0c;利用 LLaMA Factory 框架对 GLM - 4 - 9B - Chat 模型进行微调的全过程及其成果。首先介绍了实验环境的配置&#xff0c;包括 A10 显卡、nvidia 驱动版本 550、python 3.12 环境以及 CUDA 12.0 版本&am…

CRM项目的开发与调试整体策略

这次后端开发工作将在 platform 文件夹中的 fmcg-occ-base-ext-web 文件夹里进行。fmcg-occ-base-ext-web 文件夹下的所有代码实际上构成了一个微服务&#xff0c;我们之后二次开发的所有功能代码都将在这个服务里编写。 此外&#xff0c;这次项目我们不采用前后端联调的方法。…

Windows第一次上手鸿蒙周边

端云一体所需装备 很重要&#xff1a;C/D/E/F盘要有二三十G的可用空间&#xff01; 硬件&#xff1a;华为鸿蒙实验箱&#xff08;基础版&#xff09;》飞机板核心板环境监测板 软件&#xff1a;Visual Studio Code写代码 终端编译 Hiburn烧录到开发板 MobaXterm &#xff08…

【浙江省乡镇界】面图层shp格式arcgis数据+乡镇名称和编码+wgs84坐标无偏移内容测评

最新2020年乡镇界面图层shp格式arcgis数据乡镇名称和编码wgs84坐标无偏移。arcgis直接打开&#xff0c;单独乡镇界一个图层。品质高

npm install 报错:Command failed: git checkout 2.2.0-c

[TOC](npm install 报错&#xff1a;Command failed: git checkout 2.2.0-c) npm install 报错&#xff1a;Command failed: git checkout 2.2.0-c export NODE_HOME/usr/local/node-v14.14.0-linux-x64 npm config set registry https://registry.npmmirror.com 使用如上环…

【银河麒麟高级服务器操作系统】业务访问慢网卡丢包现象分析及处理过程

了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;product.kylinos.cn 开发者专区&#xff1a;developer.kylinos.cn 文档中心&#xff1a;document.kylinos.cn 交流论坛&#xff1a;forum.kylinos.cn 服务器环境以及配置 【内核版本…

【小白向超详细】使用 VSCode 远程连接 Linux 服务器详细教程

使用 VSCode 远程连接 Linux 服务器详细教程 前提条件 已安装 VSCode。已在 VSCode 中安装 Remote - SSH 插件。目标 Linux 服务器 开启了 SSH 服务&#xff0c;并可以通过 SSH 访问。本地电脑已安装 SSH 客户端&#xff08;Linux 和 macOS 自带&#xff0c;Windows 用户可以…

C++ 静态变量static的使用方法

static概述&#xff1a; static关键字有三种使用方式&#xff0c;其中前两种只指在C语言中使用&#xff0c;第三种在C中使用。 静态局部变量&#xff08;C) 静态全局变量/函数&#xff08;C) 静态数据成员/成员函数&#xff08;C&#xff09; 静态局部变量 静态局部变量&…