目录

  • 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的常见用法详解相关推荐

  1. string 的常见用法详解

    目录 1.string 的定义 2.string 中内容的访问 3.string 常用函数实例解析 在C语言中,一般使用字符数组 char str[]来存放字符串,但是使用字符串数组有时会显得操作麻烦 ...

  2. 《算法笔记》学习日记——6.1 vector的常见用法详解

    目录 6.1 vector的常见用法详解 问题 A: Course List for Student (25) 问题 B: Student List for Course (25) 小结 6.1 ve ...

  3. Linux中head和tail命令作用,Linux 命令head和tail常见用法详解

    head和tail是一组想对应的命令,默认分别显示文件的开头和末尾10行记录. head head 命令可以将一段文本的开头一部分输出到标准输出. head命令既可以处理文本文件也可以处理标准输入. ...

  4. linux lvm2,LVM2常见用法详解

    LVM2常见用法详解 1.简介 LVM(Logical Volume Manager)是逻辑卷管理的意思,是linux环境下对磁盘分区进行管理的一种机制,lvm是建立在硬盘和分区之上的一个逻辑层,来提 ...

  5. string类的用法详解

    //string函数用法详解!附代码,写具体的用法! #include <iostream> #include <string> #include <sstream> ...

  6. C++/C--unordered_map常见用法详解

    文章目录 1. std::unordered_map 的定义与特性 2. 构造 std::unordered_map 3. 赋值操作 4. 迭代器操作 4.1 指向整个容器中的元素 4.2 指向某个桶 ...

  7. C++/C--set常见用法详解【转载】

    1 概念 set是一个内部自动有序且不含重复元素的容器,其实现自动去重按升序排序.使用set,需要添加头文件:#include <set>.可以通过迭代器*it来访问set里面的元素,但是 ...

  8. C++中的unordered_map常见用法详解

    文章目录 1. std::unordered_map 的定义与特性 2. 构造 std::unordered_map 3. 赋值操作 4. 迭代器操作 4.1 指向整个容器中的元素 4.2 指向某个桶 ...

  9. python propresql mysql_python数据库操作mysql:pymysql、sqlalchemy常见用法详解

    本文实例讲述了python数据库操作mysql:pymysql.sqlalchemy常见用法.分享给大家供大家参考,具体如下: 相关内容: 使用pymysql直接操作mysql 创建表 查看表 修改表 ...

最新文章

  1. Thymeleaf 学习笔记 (5)
  2. IO流之过滤流介绍:
  3. 弱电工程网络传输基础知识讲解
  4. python扩展库丰富吗_python扩展库
  5. BadZipfile: File is not a zip file
  6. 学java编程语言_对于零基础的人而言 该如何学Java编程语言
  7. An NVIDIA kernel module ‘nvidia-drm‘ appears to already be loaded in your kernel...
  8. 微型计算机原理偏移地址,微机原理及应用复习
  9. Mitre SFR 1.4在Windows上用Visual Studio2013 成功运行 及详解
  10. bootstrap 实现吸顶效果_多种方式实现吸顶效果
  11. 大数据信息安全问题有哪些
  12. High Performance Visual Tracking with Siamese Region Proposal Network全文翻译
  13. 一个男人的品位在于选择妻子
  14. 决策的五个要素(卓有成效的管理者)
  15. 盘点2018年常用的APP下载渠道统计工具!
  16. sqlite3数据库的使用
  17. matlab 双y轴对数坐标 误差线,matlab双y轴添加误差棒(转载)
  18. socket网络编程面试
  19. 程序员不得不学的养生秘诀
  20. 氨氮废水吸附处理工艺——树脂吸附

热门文章

  1. wrf_input文件解析(PART1)未完
  2. 从零开始的自学之路——css选择器
  3. spring学习(6)
  4. 对于58同城自动登陆的补充【主要是代码】
  5. ASCII,unicode, utf8 ,big5 ,gb2312,gbk,gb18030等几种常用编码区别
  6. 逻辑分析仪抓取CAN总线波特率
  7. 字库点阵测试程序代码
  8. scrapy 安装_安装scrapy时出错
  9. 以太坊知识教程------智能合约(3)函数修饰符
  10. 设计模式--迭代器(Iterator)模式