写点什么

C++ 算法题中对于字符串的一些妙手

作者:KEY.L
  • 2022 年 7 月 08 日
  • 本文字数:1697 字

    阅读完需:约 6 分钟

今天和大家分享一下某些 c++算法面试题中针对字符串的一些投机取巧的函数,亲测好用~~~~~~~~~~~

所以花费了点时间精力整理了一下,希望能够帮到你们~~~~~~~~~

1.find()函数

假设我们有字符串a 和 b,那么 a.find(b)是指在 a 这个字符串中查找 b 并返回 b 开头字母的位置,没查到就是-1

这个函数还是比较好用的,当你需要去找到一个字符串是否出现的时候可用,注意这里返回的下标,并不是字符串,那如何由下标得到字符串呢?

这里推荐第二个函数

2.substr()函数

这个应该大家并不陌生,而且用法也十分简单,用处就是截取某段字符串,而且注意返回值就是字符串。

string s2="0123456789";string ans1=s2.substr(1); //ans1="123456789";string ans2=s2.substr(1,3);//ans2="123"; 位置从1开始长度为3
复制代码

3.isStingstream()函数

可以用在 getline 读取很长的字符串后使用 isstringstream 进行分割字符串。

他会自动把空格前和空格后的字符串进行分割,格式也是比较奇特,它本身也是一种数据类型

这个就比较好用了,对于输入的一些非常恶心的输入处理,就可以用下面这段代码,具体大家可以自行对着代码理解一下

#include<iostream>#include<algorithm>#include<sstream>        //istringstream 必须包含这个头文件#include<string>using namespace std;int a[10],cnt=0;int main(){    string str="i am a boy";    string str1="5 4 3 2 1 6 ";    istringstream is(str);    istringstream is1(str1);    string s;    while(is>>s)         cout<<s<<endl;    while(is1>>a[cnt++]);    sort(a,a+cnt-1);    for(int i=0;i<cnt-1;i++)    {        cout<<a[i]<<endl;    }}
复制代码

4.reverse()函数

reverse 函数用于反转在[first,last)范围内的顺序(包括 first 指向的元素,不包括 last 指向的元素),reverse 函数没有返回值

简而言之,可以在许多条件下使用.

复杂度:reverse()函数无返回值,时间复杂度 O(n)

但是一定要注意,它反转的区间就是括号里的左右两区间,假设我要反转

a[1,2,3,4,5]中的 2~4,那么代码应该是 reverse(a+2,a+4+1),因为

它其实是反转区间[first,last)之间的

1.交换 vector 容器,字符数组,整形数组等等中的元素顺序

vector<int> v = {5,4,3,2,1};int a[5]={1,2,3,4,5};reverse(v.begin(),v.end());//v的值为1,2,3,4,5reverse(a,a+n);//a的值为5,4,3,2,1
复制代码

2.交换 string 字符串中元素的顺序

string str="www.mathor.top";reverse(str.begin(),str.end());//str结果为pot.rohtam.wwww
复制代码

5.isalpha()函数和 isalnum()函数

isalpha()用来判断一个字符是否为字母,如果是字母则返回非零,否则返回零。

在 codeforces 等一些比较简单的代码题,就可以直接秒了,不用写 if 去判断啦

cout << isalpha('a'); //返回非零 cout << isalpha('2'); //返回零 
复制代码

6.islower 函数和 isupper()函数

islower()用来判断一个字符是否为小写字母,也就是是否属于 a~z。

cout << islower('a'); //返回非零 cout << islower('2'); //返回零 cout << islower('A'); //返回零 
复制代码

isupper()和 islower()相反,用来判断一个字符是否为大写字母

cout << isupper('a'); //返回零 cout << isupper('A'); //返回非零 
复制代码

7.tolower()函数与 toupper()函数

7.1 tolower()

tolower()函数是把字符串都转化为小写字母

7.2 toupper()

touppre()函数是把字符串都转化为大写字母

其中需要注意的是:这两个函数的声明在头文件<cctype>中

8.insert()函数

str.insert(index,string);//从下标index开始添加字符串stringstr.insert(index,string,3);//从下标index开始添加字符串string的前3个字符串,即下标3之前,[0,2]的字符str.insert(index,string,1,3);//从下标index开始添加字符串string下标[1,3]的字符
复制代码

好了, 今天的分享就到这里了,还有补充的欢迎评论区交流哈~

如果有想看的算法面经也可以私聊我,想看的题目类型都可以哦~

最后看到这的小伙伴点个赞吧!你的点赞真的很重要!还有评论俺都会回的喔~

喜欢的朋友也可以点个关注,这样我每次更新都能及时的看见了哦!

好了,下次再见啦~~~

用户头像

KEY.L

关注

还未添加个人签名 2022.07.01 加入

还未添加个人简介

评论

发布
暂无评论
C++算法题中对于字符串的一些妙手_7月月更_KEY.L_InfoQ写作社区