【190209】STL库的基本操作-string字符串

时间:2019-02-11
本文章向大家介绍【190209】STL库的基本操作-string字符串,主要包括【190209】STL库的基本操作-string字符串使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

2月9日听了杨大佬关于STL库的基本操作的讲课,做一些整理和保存。手动感谢大佬!

STL是Standard Template Library的简称,中文名标准模板库。
从根本上说,STL是一些“容器”的集合。
STL现在是C++的一部分。
STL可分为
容器(containers)、迭代器(iterators)、算法(algorithms)、空间配置器(allocator)、配接器(adapters)、仿函数(functors)六个部分。主要用前三个部分。

其实容器的本质就是一些封装好的数据结构,给出对应的函数接口,只用掌握对应的增删改查的函数接口就能完成对复杂数据结构的操作。

序列式容器
向量(vector) 连续存储的元素
列表(list) 由节点组成的双向链表,每个结点包含着一个元素
双端队列(deque) 连续存储的指向不同元素的指针所组成的数组

适配器容器
栈(stack) 后进先出的值的排列
队列(queue) 先进先出的值的排列
优先队列(priority_queue) 元素的次序是由作用于所存储的值对上的某种谓词决定的的一种队列

关联式容器
集合(set) 由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序
多重集合(multiset) 允许存在两个次序相等的元素的集合
映射(map) 由{键,值}对组成的集合,以某种作用于键对上的谓词排列
多重映射(multimap) 允许键对有相等的次序的映射

迭代器 iterator
迭代器是一种检查容器内元素并遍历元素的数据类型。C++更趋向于使用迭代器而不是下标操作,因为标准库为每一种标准容器(如vector)定义了一种迭代器类型,而只用少数容器(如vector)支持下标操作访问容器元素。

以上的内容我cv了也不懂,总之就是应用C++内置函数就对了!
我们主要讲了以下的六点:
1、string 字符串
(本篇只有string的相关操作,剩下五点再写成其他篇保留)
2、sort函数
3、queue队列
4、stack 栈
5、set 集合(元素不重复)
6、pair函数

1.string 字符串
1)
字符串与数组的区别:字符串是输入多长就储存多长,数组需要提前开好长度。
2)

#include<bits/stdc++.h>
using namespace std;
int main(void)
{
string s1; // 默认构造函数,s1为空串
string s2(s1); //将s2初始化为s1的一个副本
string s3(“valuee”); // 将s3初始化一个字符串面值副本
string s4(n,‘c’); // 将s4 初始化为字符’c’的n个副本
cin>>s5; //读取有效字符到遇到空格
getline(cin,s6); // 读取字符到遇到换行,空格可读入,直到‘\n’结束
}
3)
#include<bits/stdc++.h>
using namespace std;
int main(void)
{
//一些基本操作
string s;
cin>>s;
//输出字符串
cout<<s<<endl;
//打印字符串长度
cout<<s.size()<<endl;
1
2
3
4
5
6
7
8
9
10
11
12
13
//遍历输出
int len=s.size();
for(int i=0;i<len;i++)
cout<<s[i]<<" “;
cout<<endl;
//小写转大写
for(int i=0;i<len;i++)
{
if(islower(s[i]))
s[i]=toupper(s[i]);
}
cout<<s<<endl;
//大写转小写
for(int i=0;i<len;i++)
{
if(isupper(s[i]))
s[i]=tolower(s[i]);
}
cout<<s<<endl;
/*
a: string s2=s1+”, "; //对,把一个string对象和一个字符面值连接起来是允许的
b: string s4="hello “+”, “; //错,不能将两个字符串面值相加
c: string s5=s1+”, "+“world”; //对,前面两个相加相当于一个string对象;
d: string s6=“hello” + “, " + s2; //错
*/
}
4)
#include<bits/stdc++.h>
using namespace std;
int main(void)
{
//一些常用函数
string s=“yangzixu”;
string s1=s;
//插入函数
// 1.在it位置插入字符串p
s.insert(0,“1”);
cout<<s<<endl;
s=s1;
//替换函数
s.replace(0,4,“zhang”);//从下标0开始,连续的4个字符,替换成"zhang”
cout<<s<<endl;
s=s1;
//截取函数
string s3,s4;
s3=s.substr(0,4);//从下标0开始,截取长度为4的字符串
s4=s.substr(1);//从下标1开始。一直到最后一个字符
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
cout<<s3<<endl;
cout<<s4<<endl;
//删除函数
s.erase(3,2);//从下标3开始,删除2个字符
cout<<s<<endl;
s=s1;
s.erase(1);//从下标1开始,之后的全删除
cout<<s<<endl;
s=s1;
//查找函数
// s.find(str);//返回发现字符串首次出现的位置
if(s.find(“yang”)!=string::npos)
{
cout<<s.find(“yang”)<<endl;
}
//查找字符串出现的次数
string s5=“aabbaabbaabb”;
string s6=“bb”;
int bg=-1;
int num=0;
while(s5.find(s6,bg+1)!=string::npos)//每一次都从上一次位置的后一位开始搜索
{
bg=s5.find(s6,bg+1);
num++;
}
cout<<num<<endl;
//反转函数
reverse(s.begin(),s.end());
cout<<s<<endl;
}
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include<bits/stdc++.h>
using namespace std;
int main(void)
{
//字符串和数值相互转换
stringstream ss;//字串型的串流
string s=“123.2”;
ss<<s; //箭头指向,数据流动方向
double a;
ss>>a;
cout<<a<<endl;
ss.clear(); //重复利用要调用clear函数
int b=1234;
string s1;
ss<<b;
ss>>s1;
cout<<s1<<endl;
}

一道练手题目
题目描述
编写一个程序实现将字符串中的所有"you"替换成"we"
输入:
每行数据是一个字符串,长度不超过1000 数据以EOF结束
输出:
对于输入的每一行,输出替换后的字符串

#include<bits/stdc++.h>
using namespace std;
int main(void)
{
string s;
while(getline(cin,s))
{
int pos=s.find("you");
while(pos!=string::npos)
{
s.replace(pos,3,"we");
pos=s.find("you");
}
cout<<s<<endl;
}
}