爆笑详解c++中的string类型(一)

一.string是什么东东

string其实类似与vector N
此代码的含义就是开辟一个能屈能伸的空间给char
所以使用string无需顾忌以下的问题

  1. 输入的字符串太长所导致的越界问题(心头病 )
  2. 不知道输入字符串的长度导致浪费大把的空间

我们来看一下百度上所给的解释:

C++string 是C++中的字符串。 字符串对象是一种特殊类型的容器,专门设计来操作的字符序列。 不像传统的c-strings,只是在数组中的一个字符序列,我们称之为字符数组,而C + +字符串对象属于一个类,这个类有很多内置的特点,在操作方式,更直观,另外还有很多有用的成员函数。

个人感觉没我总结的好
偷偷告诉你个秘密:
string其实是属于STL
所以我们可以用迭代器来访问string!


二.string有什么毛用

说到这个,那我们可就得介绍一下string家族的几个函数

  1. getline()
    我们先来看一看它是怎么用的:

     string lines;
     getline(cin,lines);
    

    提起这个,多少人是老泪纵横,Why!
    原因是因为getline()有一个又臭又长的东西
    虽说它是按行读,十分方便
    可是它并不会读掉字符串末尾的回车
    所以我们在使用完getline()读取完一行后,需要排除getchar()来吃回车

  2. size()
    这个东东是用来获取字符串长度的,但它的返回值是double
    大概是这样用的:

    string lines;
    cin>>lines;
    int siz=lines.size();
    

    不用再暴力打表跑一遍了,十分良心

  3. clear()
    比较冷门,也比较实用
    毕竟能节省一点代码的长度是一点
    clear()是用来清空字符串的

    string lines;
    getline(cin,lines);
    lines.clear();
    
  4. find()
    可谓是string里面最令人感动的函数
    帮助你在字符串中查找字符
    如果查找到了就返回下标
    没找到返回一个npos;
    例如这样:

    string s="114514114514114514";
    int lop=s.find("113");//此时返回s.npos;
    if(lop==s.npos) cout<<"NO";
    cout<<lop;
    

    OK,我们先了解这么多
    下面来看几道题

三.实战

给定 t 个字符串,请判定这些字符串是否分别是 YesYesYesYes… 的子串。是则输出 YES,否则输出 NO(YES 和 NO 大小写不定).

字串是指包含在内的连续的字符所组成的字符串

这道题很明显用find()
可怎么做呢?
先看代码

#include 
using namespace std;
int main()
{
	int n;
	cin >> n;
	while (n -- )
	{	string map;//创建字典
		string s;
		cin>>s;
		
		while (map.size() < s.size()) map+="YesYes";
		map += "YesYes";
     	if(map.find(s)!=string::npos) cout<<"YES"<<endl;//string::npos=s.npos
    	else{cout<<"NO"<<endl;}
	}
}

是不是一点就通?

课后作业:

1.给定一个字符串以及一串数,你可以将数列中所有相同的数改为任意一个字母,问能否将数列改变成给定的字符串。
2.你现在有一个由 n 个字符组成的字符数组 a,现在请你将他们分成正好两组(正好指每一个元素在且仅在一个组内),使得 ∣sum1∣−∣sum2∣ 的值尽可能大,请你求出这个最大值。

点赞过十,更新下一期(下一期评讲课后作业qwq)

你可能感兴趣的:(c++,数据结构,开发语言)