咸鱼翻身之路——我与string函数的爱恨情仇

啊哈,本咸鱼又来啦,最近开始正式的学c++了,于是为了纪念这个伟大的日子,就聊聊我和string函数的那些事吧
我们的第一次相遇是在c的头文件里,那时候我就感觉,哇,string真是个好东西,之后在某个机缘巧合下,我从大佬那里知道了c++里的string函数(没错,我抱大佬大腿抱的很紧的),但当时只是浅浅的了解了一下。但现在不同了,我已经 “ 深入 ” 的了解过它了,现在我就来介绍一下它

string函数

首先区分一下用cin>>数组名和getline(cin,数组名)两者之间的关系
cin>>数组名是输入一个字符串,遇到空格或回车结束输入
getline(cin,数组名)是输入一行,遇到空格不结束,遇到回车结束

1、字符串长度
用法:字符串名.length();

string a;
len=a.length();

结果:返回字符串a的长度
2、字符串比较
string支持常见的比较操作符(>,>=,<,<=,==,!=),在使用>,>=,<,<=这些操作符的时候是根据 “ 当前字符特性 ” 将字符按字典顺序进行逐一得比较。字典排序靠前的字符小,比较的顺序是从前向后比较,遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小。
除此之外还可以用compare函数进行比较

compare的第一种用法:

string a("bellflower");
string b("bell");
string c("cat");
int x=a.compare(c);//x小于0
int y=a.compare(b);//y大于0

如果两个字符串不相同,则遵循比较的基本原理(即根据 “ 当前字符特性 ” 将字符按字典顺序进行逐一得比较,规则同上)
如果第一个字符串位于第二个字符串之前,返回一个小于0的值,如果两个字符串相同,返回0,如果第一个字符串位于第二个字符串后面,返回一个大于0的值
注:如果较长的字符串前半部分与较短的字符串相同,则较短的字符串将位于较长的字符串之前,也就是返回一个大于0的值

compare的第二种用法:
字符串名.compare(第一个字符串的选定位置,规定的第一个字符串的长度,第二个字符串名)

string a("bellflower");
string b("bell");
int x=a.compare(0,4,b);//a等于0

这段代码的意思是从字符串a的0位置开始的4个字符与字符串b比较,返回值遵循比较的基本原理
3、字符串连接

string a("bell");
string b("flower");
a=' '+a;//a=" bell"
a=a+b;//a=" bellflower"

4、字符串提取

b=a.substr();//将a的值赋给b,相当于b=a;
b=a.substr(n);//n为整数,将字符串a[n]开始到字符串结束赋值给b
b=a.substr(n,m);//将字符串a[n]字符开始,长度为m的字符串赋值给b

5、插入字符串

a.insert(n,b);//将字符串b插入到字符串a[n]的位置上

6、替换字符串

 a.replace(n,m,b);//将字符串a从a[n]开始,长度为m的字符串替换为b

7、删除字符串

a.erease(n,m);//将字符串a从a[n]开始,长度为m的字符串删除
a.clear();//删除字符串a

8、交换字符串

 swap(a,b);//交换字符串a,b

9、字符串搜索

1.find()

 w=a.find(b);//返回在字符串a中最先找到字符串b的位置,如果未找到返回-1
 w=a.find(b,n);//返回从字符串a[n]开始最先找到字符串b的位置,如果未找到返回-1

2.rfind()

w=a.rfind(b);//返回在字符串a中从后往前最先找到字符串b的位置,如果未找到返回-1
w=a.rfind(b,n);//返回从字符串a[n]开始往前最先找到字符串b的位置,如果未找到返回-1

与find()类似,只不过是从后往前找了而已
3.find_first_of()

w=a.find_first_of(b);//返回在字符串a中最先找到字符串b中字符的位置,如果未找到返回-1
w=a.find_first_of(b,n);//返回从字符串a[n]开始最先找到字符串b中字符的位置,如果未找到返回-1
//例子
string a("baskdb");
string b("hgsp");
int w=a.find_first_of(b);//w等于2,因为字符串b中存在与字符串a相同的字符,就返回相同字符在字符串a中的位置

用法与find类似,只不过它不是搜索整个子字符串,而是搜索子字符串中的字符首次出现的位置(只要子字符串中有一个字符与母字符串相同就返回)
4.find_last_of()

w=a.find_last_of(b);//返回在字符串a中最后找到字符串b中字符的位置,如果未找到返回-1
w=a.find_last_of(b,n);//返回从字符串a[n]开始最后找到字符串b中字符的位置,如果未找到返回-1

用法和find_first_of()类似,不再赘述
5.find_first_not_of()

w=a.find_first_not_of(b);//返回在字符串a中最先找到字符串b中不位于字符串a中的字符的位置,如果未找到返回-1
w=a.find_first_not_of(b,n);//返回从字符串a[n]开始最先找到字符串b中不位于字符串a中的字符的位置,如果未找到返回-1
//例子
string a("baskdb");
string b("bgsk");
int w=a.find_first_not_of(b);//w等于1

用法与find_first_of()类似,不过它搜索第一个不位于子字符串中的字符
6.find_last_not_of

w=a.find_last_not_of(b);//返回在字符串a中最后找到字符串b中不位于字符串a中的字符的位置,如果未找到返回-1
w=a.find_last_not_of(b,n);//返回从字符串a[n]开始最后找到字符串b中不位于字符串a中的字符的位置,如果未找到返回-1
//例子
string a("baskdb");
string b("bgsk");
int w=a.find_first_not_of(b);//w等于4

用法与find_first_not_of()类似,不再赘述

说完了这些,就用一道题来证明我和string的感情是多么的好吧
小明家养了一只鹦鹉,每天小明都训练鹦鹉学说话,经过一段时间训练后,鹦鹉能够说出来比较简短的字词,可是鹦鹉说不了太长的话,每次只能重复小明说的话中最后一个单词。
输入
首先输入若干行字符串(每行不超过100个字符),每行字符串中有若干个单词(至少一个,多个单词之间以空格分隔)。
输出
输出共n行,每行都是小明说的话里最后一个单词。
样例

输入数据
3
Hello word
You are the best
wonderful

样例输出
word
best
wonderful

这道题是我没有靠大佬自己做出来的!!自豪的一匹
粘上代码满足一下自豪感先

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,len,w;
	cin>>n;
	string a[100];
	string b=" ";
	getchar();//吸收输入n之后的回车
	for(int i=0;i<n;i++){ 
		getline(cin,a[i]);
		a[i]=' '+a[i];//字符串a前加空格,方便下面输查找
	}
	for(int i=0;i<n;i++){
		len=a[i].length();//判断字符串长度
		w=a[i].rfind(b);//从后往前找最先发现的b的位置
		cout<<a[i].substr(w+1,len-w)<<endl;//w是空格,所以我们从w+1开始输出
										 //len-w是输出的长度
	} 
} 

总的来说这道题难度不算大(毕竟我这个咸鱼都能做出来),知道string函数的基本用法后,每个字符串从后往前用空格判断最后一个单词然后输出就可以,唯一难搞的是只有一个单词的情况,所以我在每个字符串前面都加了空格来解决这个问题

题外话:
不得不说string函数是真的好用啊,我朋友用char定义数组做的这个题比我多了很多很多行,各种开关都快把我看迷了,所以我以后还是会继续更加 “ 深入 ” 的去了解它(当然是在抱紧大佬大腿的情况下继续,毕竟我还想多热乎一会),因为我与string函数的故事还远远没有结束

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值