一.string是什么东东
string
其实类似与vector <char> N
此代码的含义就是开辟一个能屈能伸的空间给char
所以使用string
时无需顾忌以下的问题
- 输入的字符串太长所导致的越界问题(
心头病) - 不知道输入字符串的长度导致浪费大把的空间
我们来看一下百度上所给的解释:
C++string 是C++中的字符串。 字符串对象是一种特殊类型的容器,专门设计来操作的字符序列。 不像传统的c-strings,只是在数组中的一个字符序列,我们称之为字符数组,而C + +字符串对象属于一个类,这个类有很多内置的特点,在操作方式,更直观,另外还有很多有用的成员函数。
个人感觉没我总结的好
偷偷告诉你个秘密:
string
其实是属于STL
的
所以我们可以用迭代器来访问string
!
二.string有什么毛用
说到这个,那我们可就得介绍一下string
家族的几个函数
-
getline()
我们先来看一看它是怎么用的:string lines; getline(cin,lines);
提起这个,多少人是老泪纵横,Why!
原因是因为getline()
有一个又臭又长的东西
虽说它是按行读,十分方便
可是它并不会读掉字符串末尾的回车
所以我们在使用完getline()
读取完一行后,需要排除getchar()
来吃回车 -
size()
这个东东是用来获取字符串长度的,但它的返回值是double
大概是这样用的:string lines; cin>>lines; int siz=lines.size();
不用再暴力打表跑一遍了,十分良心
-
clear()
比较冷门,也比较实用
毕竟能节省一点代码的长度是一点
clear()
是用来清空字符串的string lines; getline(cin,lines); lines.clear();
-
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 <bits/stdc++.h>
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∣ 的值尽可能大,请你求出这个最大值。