我是靠谱客的博主 饱满小刺猬,最近开发中收集的这篇文章主要介绍记:应聘深信服科技 C++工程师(南京),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

笔试

1.正则表达式。

以下是自己后续的学习。

/*
环形报数。 链表,正则表达式。
考试的时候不会,今天先来学习一下正则表达式。
*/
/*
2020.3.25 11:10
学习正则表达式。来自bili视频
https://www.bilibili.com/video/BV1Cs411a7Le?p=12
*/
#include <regex>
#include <iostream>
using namespace std;
//int main() {
//	string str;
//	while (true) {
//
cin >> str;
//
//regex e("abc");
//没有任何的特殊的匹配,仅仅是匹配"abc"
//
//regex e("abc.");
//.表示任何字符,但不可以是空格符或是换行符。。
//
//如果要求,出现在str的前面,则需要在e前面加上^
如果出现在后面,则需要在e的后面加上$
//
//例如 "^abc."则表示e需要出现在str的前面,才算是匹配成功。
//
//regex e("abc.$");
//.表示任何字符,但不可以是空格符或是换行符。。
//
//regex e("abc", regex_constants::icase);
//后面的参数的意思是忽略大小写。可以匹配。ABC abc ABc .....
//
//regex e("abc?");
//? 的作用是前面的c字符可以出现
0次或1次
。
//
//regex e("abc*");
//*的作用是前面的c字符可以出现
0次或多次。
//
//regex e("abc+");
//+的作用是前面的c字符出现
1次或多次。
与*相比,+限制了至少要出现1次。
//
//regex e("ab[cd]");
//[]的意思是里面的字符任意出现一个。
//
//regex e("ab[^cd]");
//^的作用是不在[]里面的字符。在这里就是不是c或d的一个字符。
//
//但是这里只能出现一次。需要出现多次,就需要使用前面的*或+
//
//regex e("ab[cd]*");
//这样就可以出现多次。
//
//有时还需要它出现指定的次数。
//
//regex e("ab[cd]{3,}");
//出现的次数在3次以上。
//
//regex e("ab[cd]{3,5}");
//出现的次数在3-5次。
//
//regex e("abc|fgde");
//|表示或。就是匹配abc 或者是fgde
//
//regex e("(abc)de+\1");
//这个可以匹配abcdeabc
那个+是起连接作用的。
//
//这个东西吧,可以少些一点。。暂时不知道有啥用。。
//
//下面这个是匹配一个人的邮箱的。感觉很实用。
//
//regex e("[[:w:]]+@[[:w:]]+.com");
//[[:w:]]可以表示 数字 字母 和下划线。
//
//regex e("abc.+"); //这里的+表示.出现一次或多次。可以匹配abcd abcdefefefe abcfjk等。
//
//如果我们想匹配+呢?
//
//regex e("abc.+",regex_constants::grep);
//这样就可以匹配abcr+ abcd+等。
//
//bool match = regex_match(str, e);
//
//bool sub_match = regex_search(str, e);
//这里的这个函数只要求部分的子串和e匹配就可以了。 e出现在str的前中后都可以。
//
//如果要求,出现在str的前面,则需要在e前面加上^
如果出现在后面,则需要在e的后面加上$
//
//例如 "^abc."则表示e需要出现在str的前面,才算是匹配成功。
//
//cout << (match ? "matched" : "not matched") << endl;
//	}
//	return 0;
//}
//int main() {
//	string str;
//	while (true) {
//
cin >> str;
//
smatch m;
//可以匹配出中间的那串邮箱的代码。
//
regex e("([[:w:]]+)@([[:w:]]+).com");
//
bool found = regex_search(str, m, e);
//
cout << "m.size()= "<<m.size()<<endl;
//
for (int i = 0; i < m.size(); i++) {
//
cout << "m[" << i<<"]"<<m[i]<<endl;
//
}
//
//m[0]是一整串字符串。
//
//m[1]之后的是部分的。
例如输入是www@cwr.com
那么m[0]是整个字符串。m[1]是www
m[2]是cwr
//
cout << "邮箱的前缀" << m.prefix().str() << endl;
//这两个东西一个是前缀,一个是后缀。
//
cout << "邮箱的后缀" << m.suffix().str() << endl;
//这个东西的作用是记录除了邮箱之外的前后文。
//
//例如,如果输入是<email>wee@ed.com<end>
那么前缀是<email>,后缀是<end>。
//	}
//	return 0;
//}
//可以说这个方法只适合很正常的 xxxx@xxx.com邮箱。不是很有通用性。。。
//我来设计一个有通用性的邮箱检测。
int main() {
string str;
while (true) {
cin >> str;
//regex e("^.+[@].+[.com|.edu.cn]$");
//这么写倒是确实容易。。。
//但是已经几乎没有任何的检查了。。。
string pattern( "(\w)+((-)*(\w)*)*@(\w)+((\.(\w)*)*)" );
regex e(pattern);
bool match = regex_match(str, e);
cout << (match ? "matched" : "not matched") << endl;
}
return 0;
}
//接下来是关于regex的两个迭代子。
//regex_iterator
regex_token_iterator
// 大家看这个视频
https://www.bilibili.com/video/BV1Cs411a7Le?p=14
//我的脑容量今天接受不了了。
//三个推荐的网站。
//https://www.runoob.com/regexp/regexp-intro.html
菜鸟教程的。
//http://blog.guoyb.com/2016/09/10/cpp11-9/
2.STL中set的find()函数。

1.set是一个内部自动递增排序且不重复的容器。
2.定义set数组。set<int> a[100] 一个数组,数组里面的每个元素都是set<int>
3.set容器内元素的访问只能使用迭代器,例如:set<int>::iterator it;这样就得到了迭代器it,并且只能通过 ∗ i t *it it来访问set里面的元素。(由于除开vector和string之外的STL容器都不支持 ∗ ( i t + 1 ) *(it+1) (it+1)的访问方式。)

set<int> it;
for(set<int>::iterator it=st.begin();it!=st.end();it++){
print("%d",*it);
}

4.set的find(value)函数返回set中对应值为value的迭代器,时间复杂度为O(log N),N为set内的元素个数。

set<int>::iterator it=st.find(2);
//在st中查找2,返回其迭代器。
3.C++中string的find()函数。
str.find(str2)
//当str2是str的子串时,返回其在str中第一次出现的位置;如果不是,返回string::npos.
str.find(str2,pos)
//从str的pos号位置开始匹配str2,返回值与上相同。
//时间复杂度是O(nm),n和m分别是str和str2的长度。
4.关于C++的迭代器。

迭代器的出现是为了访问不同类型容器的方便。
(截图来自:bili一up主)
这是迭代器的分类:
在这里插入图片描述

容器会根据内部保存数据的类型,尽可能提供功能最多的迭代器。如string容器使用的是随机访问迭代器。

凉了。

最后

以上就是饱满小刺猬为你收集整理的记:应聘深信服科技 C++工程师(南京)的全部内容,希望文章能够帮你解决记:应聘深信服科技 C++工程师(南京)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(30)

评论列表共有 0 条评论

立即
投稿
返回
顶部