c++STL容器之string容器
本质;string是c++风格的字符串,而string本质上是一个类
string和char*的区别:
- char*是一个指针;
- string是一个类,类内部封装了char*,管理这个字符串,是一个char*的容器;
特点:
string内部封装了很多内部成员方法,例如find、copy、delete、replace、insert等。
string管理char*所分配的内存,不用担心复制越界和取值越界等,由类内部进行操作。
一、string构造函数
- string():创建一个空的字符串
- string(const char* s):使用字符串s初始化
- string(const string& str):使用一个string对象初始化另一个string对象
- string(int n,char c):使用n个字符c初始化
#include<iostream>
#include<string>
using namespace std; void test() {
string s1;//默认构造
const char* str = "hello world";
string s2(str);
cout <<"s2="<< s2 << endl;
string s3(s2);
cout << "s3=" << s3 << endl;
string s4(10, 'a');
cout << "s4=" << s4 << endl;
} int main() {
test();
system("pause");
return 0;
}
二、string赋值操作
#include<iostream>
#include<string>
using namespace std; void test() {
string str1;
str1 = "hello world";
cout << "str1=" << str1 << endl;
string str2;
str2 = str1;
string str3;
str3 = 'c';
string str4;
str4.assign("hello woeld");
string str5;
str5.assign("hello world", 5);//只赋值前n个字符
string str6;
str6.assign(str5);
string str7;
str7.assign(10, 'w');//赋值十个w
} int main() {
test();
system("pause");
return 0;
}
三、字符串拼接
#include<iostream>
#include<string>
using namespace std; void test() {
string str1;
str1 = "我";
str1 += "爱中国";
cout << "str1=" << str1 << endl;
str1 += '!';
cout << "str1=" << str1 << endl;
string str2 = "LOL";
str1 += str2;
cout << "str1=" << str1 << endl;
string str3 = "i";
str3.append(" love you");
cout << "str3=" << str3 << endl;
str3.append("new gameing",4);//拼接前n个字符
str3.append(str2);
str3.append(str2, 0, 2);//只截取第0,1个字符并拼接
cout << "str3=" << str3 << endl;
} int main() {
test();
system("pause");
return 0;
}
三、字符串的查找和替换
#include<iostream>
#include<string>
using namespace std; void test() {
//1.查找
string str1 = "abcdefg";
//find、rfind只找到第一个出现的位置
cout << str1.find("bc", 0) << endl;//默认从零位置开始,并返回找到的索引位置,未找到返回-1
cout << str1.rfind("bc",6) << endl;//rfind是从右往左查找,6是起始索引位置
//2.替换
str1.replace(0, 2, "pppp");//将0-1之间的位置替换成"pppp"
cout << str1 << endl;
} int main() {
test();
system("pause");
return 0;
}
四、字符串比较
#include<iostream>
#include<string>
using namespace std; void test() {
string str1 = "hello";
string str2 = "hello";
//逐一比较每个字符的ASCII,若全部相等,返回0,若str1的ASCII大于str2则返回1,否则返回-1
str1.compare(str2);
} int main() {
test();
system("pause");
return 0;
}
五、字符串的存取
#include<iostream>
#include<string>
using namespace std; void test() {
string str1 = "hello";
//读
cout << str1[0] << endl;;
cout << str1.at(0) << endl;
//写
str1[0] = 'm';
cout << str1 << endl;
str1.at(0) = 'p';
cout << str1 << endl;
} int main() {
test();
system("pause");
return 0;
}
六、字符串的插入与删除
void test() {
string str1 = "hello";
str1.insert(1, "big");//在某个位置插入
cout << str1 << endl;
str1.erase(1, 3);//删除起始位置和最终位置之间的
cout << str1 << endl;
}
七、子串获取
void test() {
string str1 = "hello";
cout << str1.substr(1, 3) << endl;//返回1-3之间的子串,包含下标1,2,3
}
c++STL容器之string容器的更多相关文章
- [知识点]C++中STL容器之map
UPDATE(20190416):写完vector和set之后,发现不少内容全部引导到map上了……于是进行了一定的描述补充与更正. 零.STL目录 1.容器之map 2.容器之vector 3.容器 ...
- [知识点]C++中STL容器之vector
零.STL目录 1.容器之map 2.容器之vector 3.容器之set 一.前言 关于STL和STL容器的概念参见STL系列第一篇——map(见上).今天介绍第二个成员——vector. 二.用途 ...
- [知识点]C++中STL容器之set
零.STL目录 1.容器之map 2.容器之vector 3.容器之set 一.前言 继上期的vector之后,我们又迎来了另一个类数组的STL容器——set. 二.用途与特性 set,顾名思义,集合 ...
- C++STL模板库序列容器之List容器
目录 一丶List容器的存储结构 二丶丶STL中list容器的使用. 一丶List容器的存储结构 list容器底层是链表结构来维护的.跟vector不一样. vector是数组维护的.拥有连续内存.所 ...
- STL容器之map
[1]map容器 map 是关联容器.容器中的每一个元素都是由一个键值和一个数据值组成的. set 是一个集合它以其元素作为键值(同一个键值只能出现一次),且默认以升序排列. list 是一个顺序容器 ...
- STL容器之vector
[1]模板类vector 模板类vector可理解为广义数组.广义数组,即与类型无关的数组,具有与数组相同的所有操作. 那么,你或许要问:既然C++语言本身已提供了一个序列式容器array,为什么还要 ...
- STL容器之Array[转]
转自https://blog.csdn.net/sin_geek/article/details/51067874 作者 Sin_Geek 简介 array在头文件<array> 中定义 ...
- C++ STL容器之 stack
STL 中的 stack 是一种容器适配器,而不是一种容器. 它是容器适配器是指,只要支持一系列方法的容器(empty, size, back, push_back, pop_back),都能作为st ...
- STL容器之set
[1]set容器 一个集合(set)是一个容器,它其中所包含的元素的值是唯一的. [2]set容器方法 (1)set构造函数.插入函数.遍历过程 应用示例代码如下: #include <set& ...
随机推荐
- 性能利器 Takin 来了!首个生产环境全链路压测平台正式开源
6 月 25 日,国内知名的系统高可用专家数列科技宣布开源旗下核心产品能力,对外开放生产全链路压测平台产品的源代码,并正式命名为 Takin. 目前中国人寿.顺丰科技.希音.中通快递.中国移动.永辉超 ...
- Servlet学习一(Servlet的使用流程)
一.servlet运行流程 运行流程:浏览器发送请求到服务器,服务器根据url地址在webapps中寻找对应的项目文件夹然后再web.xml中检索对应的servlet,并进行调用二.servlet类写 ...
- Go 里的超时控制
前言 日常开发中我们大概率会遇到超时控制的场景,比如一个批量耗时任务.网络请求等:一个良好的超时控制可以有效的避免一些问题(比如 goroutine 泄露.资源不释放等). Timer 在 go 中实 ...
- Maven还停留在导jar包?快来探索Nexus私服的新世界
写在前面 Maven,学习框架之前我们都会接触到的一个工具,感觉他的定位,似乎就跟git一样,只是方便我们开发?于是自然而然的,很多小猿对于Maven都只是停留在会用的阶段,利用他来构建,打包,引入j ...
- series和读取外部数据
1.为什么学习pandas 我们并不是不愿意学习新的知识,只是在学习之前我们更想知道学习他们能够帮助我们解决什么问题.--伟哥 numpy虽然能够帮助我们处理数值,但是pandas除了处理数值之外(基 ...
- C# 如何将日期格式化ISO8601模式
类似于这样的时间戳格式:预计来访时间,时间参数需满足ISO8601格式:yyyy-MM-ddTHH:mm:ss+当前时区,例如北京时间:2018-07-26T15:00:00 + 08:00 stri ...
- Markdown使用方式
区块 区块引用在段落开头使用>,后面紧跟一个空格符号 > 区块引用 > XXX > XXX 高级技巧 HTML元素 居中 <center>XXX</cent ...
- Vue面试题2
Class与Style绑定工作有用过吗: 有,后台管理系统菜单.主题色切换 .tab选项卡等..... 计算属性和侦听器区别.使用场景: 计算属性有缓存.并且是响应式依赖缓存,调用不加小括号 利用vu ...
- Java项目中集成钉钉机器人推送消息提醒
前言: 项目中有一个需求,当有新订单产生的时候,希望能够及时通知到业务相关人员进行处理,整体考虑了一下,选用了钉钉机器人提醒功能(公司内部主要也是使用钉钉进行通讯). 操作: 主要分为两部分进行处理: ...
- 『学了就忘』Linux基础命令 — 23、文件基本权限的介绍和作用
目录 1.基本权限的介绍 (1)权限位的含义 (2)权限的优先级 2.权限的基本作用 (1)权限含义的解释 (2)目录权限说明 1.基本权限的介绍 (1)权限位的含义 前面讲解ls命令时,我们已经知道 ...