【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) 由{键,值}对组成的集合,以某种作用于键对上的谓词排列
迭代器 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;
}
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 关于void QProcess::start参数问题的解决
- Python格式化输出
- 多线程 - 生产者消费者模式
- TCP的三次握手和四次挥手
- Springboot异常处理
- Excel实战技巧84: 让形状生动起来
- 利用Python进行组合数计算
- Docker下解决mysql出现"the table is full"的问题
- unity3d 5.0中Renderer后面没有了material
- 在windows下检查应用程序是否为兼容模式启动及使用Qt输出系统信息
- Qt5.5.1版本中QString().arg()和qss在处理路径及文件名需要注意的地方
- Typecho将Gravatar头像改为QQ头像
- python socket 简单示例
- 深入了解C++虚函数
- Mathematica 在高考数学与高等数学等学习中的简单应用与思考