string的常见用法详解
目录
- string的定义
- string中内容的访问
- string常用函数实例解析
在C语言中,一般使用字符数组char str[]来存放字符串,但是使用字符数组有时会显得操作麻烦,而且容易因经验不足而产生一些错误。为了使编程者可以更方便地对字符串进行操作, C++在STL中加入了string类型,对字符串常用的需求功能进行了封装,使得操作起来更方便,且不易出错。
需要的头文件:
#include <string> //(注意string.h和string是不一样的头文件)
需要的其他东西:
using namespace std;
string的定义
定义string的方式跟基本数据类型相同,只需要在string后面跟上变量名即可:
string str;
如果需要初始化,可以直接给string类型的变量进行赋值:
string str="abcd";
string中内容的访问
(1)通过下标访问
一般来说,可以直接像字符数组那样去访问string:
如果要读入和读出整个字符串,则只能用cin和cout:
由上图你可以看到,string的输入的终止读取符也是空格,这和 scanf()对字符数组的读取效果是一样的。
上面的代码对任意的字符串输入,都会输出同样的字符串。
那么,真的没有办法用printf来输出string么? 其实是有的,即用 c_str()将string类型转换为字符数组进行输出,
例如:
(2)通过迭代器访问
一般仅通过(1)即可满足访问的要求,但是有些函数比如insert()与erase()则要求以迭代器为参数,
因此还是需要学习一下string迭代器的用法。
由于string不像其他的容器那样需要参数,因此可以直接如下定义:
string::iterator it;
这样就得到了迭代器 it ,并可以通过 *it来访问string里的每一位:
最后指出,string 和 vector一样,支持直接对迭代器进行加减某个数字,如str.begin()+3的写法是可行的。
string常用函数实例解析
(1) operator+=
这是string的加法,可以将两个string直接拼接起来。
(2) compare operator
两个string类型可以直接使用==、!=、<、<=、>、>=比较大小,比较规则是字典序。
例子:
(3) length() / size()
length()返回string的长度,即存放的字符数,时间复杂度为O(1)。size()与length()基本相同。
(4) insert()
string的insert()函数有很多写法,这里给出几个常用的写法,时间复杂度为O(N)。
①insert(pos,string) , 在pos号位置插入字符串string。
②insert( it , it2 , it3 ), it为原字符串的欲插入位置,it2和 it3 为待插字符串的首部迭代器,用来表示串 [ it2, it3)
将被插在it的位置上。
(5)erase()
erase()有两种方法: 删除单个元素、删除一个区间内的所有元素。时间复杂度为O(N)
①删除单个元素
str.erase(it) ,用于删除单个元素,it为需要删除元素的迭代器。
②删除一个区间内的所有元素
删除一个区间内的所有元素有两种方法:
str.erase(first,last),其中first为所需删除区间的起始迭代器,而last则为所需要删除区间的末尾迭代器的下一个地址,
即删除 [ first , last) 内的所有元素。
str.erase(pos , length) , 其中pos为需要开始删除的起始位置,length为删除的字符个数。
(6)clear()
clear()用以清空string中的数据,时间复杂度一般为O(1)。
(7)substr()
substr(pos,len)返回从pos号位开始,长度为len的子串,时间复杂度为O(len)
(8)string:npos
string:npos是一个常数,其本身的值为-1,但由于是unsigned int类型,因此实际上也可以认为是unsigned int类型的最大值。
string:npos用以作为find函数失配时的返回值。例如在下面的实例中可以认为string::npos等于-1或者4294967295.
(9)find()
str.find(str2),当str2是str的字串时,返回其中在str中第一次出现的位置:
如果str2不是str的子串,那么返回string::npos。
str.find(str2,pos),从str的pos号位开始匹配str2,返回值与上相同。
时间复杂度为O(nm),其中n和m分别为str和str2的长度。
(10)replace()
str.replace(pos,len,str2)
把str从pos号位开始、长度为len的子串替换为str2。
str.replace(it1,it2,str2)把str的迭代器[it1,it2)范围内的子串替换为str2。
string的常见用法详解相关推荐
- string 的常见用法详解
目录 1.string 的定义 2.string 中内容的访问 3.string 常用函数实例解析 在C语言中,一般使用字符数组 char str[]来存放字符串,但是使用字符串数组有时会显得操作麻烦 ...
- 《算法笔记》学习日记——6.1 vector的常见用法详解
目录 6.1 vector的常见用法详解 问题 A: Course List for Student (25) 问题 B: Student List for Course (25) 小结 6.1 ve ...
- Linux中head和tail命令作用,Linux 命令head和tail常见用法详解
head和tail是一组想对应的命令,默认分别显示文件的开头和末尾10行记录. head head 命令可以将一段文本的开头一部分输出到标准输出. head命令既可以处理文本文件也可以处理标准输入. ...
- linux lvm2,LVM2常见用法详解
LVM2常见用法详解 1.简介 LVM(Logical Volume Manager)是逻辑卷管理的意思,是linux环境下对磁盘分区进行管理的一种机制,lvm是建立在硬盘和分区之上的一个逻辑层,来提 ...
- string类的用法详解
//string函数用法详解!附代码,写具体的用法! #include <iostream> #include <string> #include <sstream> ...
- C++/C--unordered_map常见用法详解
文章目录 1. std::unordered_map 的定义与特性 2. 构造 std::unordered_map 3. 赋值操作 4. 迭代器操作 4.1 指向整个容器中的元素 4.2 指向某个桶 ...
- C++/C--set常见用法详解【转载】
1 概念 set是一个内部自动有序且不含重复元素的容器,其实现自动去重按升序排序.使用set,需要添加头文件:#include <set>.可以通过迭代器*it来访问set里面的元素,但是 ...
- C++中的unordered_map常见用法详解
文章目录 1. std::unordered_map 的定义与特性 2. 构造 std::unordered_map 3. 赋值操作 4. 迭代器操作 4.1 指向整个容器中的元素 4.2 指向某个桶 ...
- python propresql mysql_python数据库操作mysql:pymysql、sqlalchemy常见用法详解
本文实例讲述了python数据库操作mysql:pymysql.sqlalchemy常见用法.分享给大家供大家参考,具体如下: 相关内容: 使用pymysql直接操作mysql 创建表 查看表 修改表 ...
最新文章
- Thymeleaf 学习笔记 (5)
- IO流之过滤流介绍:
- 弱电工程网络传输基础知识讲解
- python扩展库丰富吗_python扩展库
- BadZipfile: File is not a zip file
- 学java编程语言_对于零基础的人而言 该如何学Java编程语言
- An NVIDIA kernel module ‘nvidia-drm‘ appears to already be loaded in your kernel...
- 微型计算机原理偏移地址,微机原理及应用复习
- Mitre SFR 1.4在Windows上用Visual Studio2013 成功运行 及详解
- bootstrap 实现吸顶效果_多种方式实现吸顶效果
- 大数据信息安全问题有哪些
- High Performance Visual Tracking with Siamese Region Proposal Network全文翻译
- 一个男人的品位在于选择妻子
- 决策的五个要素(卓有成效的管理者)
- 盘点2018年常用的APP下载渠道统计工具!
- sqlite3数据库的使用
- matlab 双y轴对数坐标 误差线,matlab双y轴添加误差棒(转载)
- socket网络编程面试
- 程序员不得不学的养生秘诀
- 氨氮废水吸附处理工艺——树脂吸附