浅谈string

<string>

typedef basic_string<char> string;

本篇主要内容是简单地介绍 string类 在竞赛方面较实用的一些功能,可能满足不了各大佬的需求

还是采用查字典的形式,右边目录速览吧


一、迭代器

string可以被归为顺序容器,有着和其他容器一样的随机访问迭代器

(1)、begin

iterator begin();

返回指向string的第一个字符的迭代器。

(2)、end

返回一个尾后迭代器,指向尾元素的下一个位置

二、功能型函数

(1)、size

size_t size();

返回字符串的长度,顺便提醒句,以字节为单位

(2)、length

与(1)完全相同

(3)、clear

将当前容器的所有内容清空

(4)、empty

bool empty();

返回当前容器是否为空

三、元素访问

(1)、[]

下标随机访问,它就是神!

简单举例:源字符串每两个字母之间有一个空格,要求只单独输出字母

#include <iostream>

using namespace std;

int main ( void )
{
string a = "a b c d e f"; for ( int i = 0; i < a.size(); i += 2 )
{
cout << a[i];
}
cout << endl;
return 0;
}

看看这优美的下标访问,是不是有种可以立马抛弃传统的char数组的感觉了

(2)、at

和下标访问是一样的,只不过更加安全,如果超出范围,会返回out_of_range异常

换成at输出以上程序:

#include <iostream>

using namespace std;

int main ( void )
{
string a = "a b c d e f"; for ( int i = 0; i < a.size(); i += 2 )
{
cout << a.at(i);
}
cout << endl;
return 0;
}

(3)、back

char& back();

返回对最后一个元素的引用,所以我们可以进行输出或重写操作

如果string为空呢? 那此操作的行为是未定义的,否则不会抛出异常

(4)、front

返回对首元素的引用

四、对string添加修改的一些操作

(1)、+=

这个就太牛了,可以在当前值的末尾附加其他字符或字符串来扩展字符串

当然这意味着还有两种操作

1、+

s1 + s2

返回s1s2连接后的结果

还有一个,就是字面值也可以与string对象加起来,注意:一定要保证加号至少连接了一个string对象

s1 + "hello"

比如说!你不能写成以下这样!

s1 + ( "hello" + ", world" )

2、=

s1 = s2

s2的副本代替s1中原来的字符

(2)、push_back

void push_back (char c);

c追加到字符串的末尾,并将其长度自增1

(3)、pop_back

void pop_back();

删除string中的最后一个字符

如果string中没有任何元素,则该行为所产生的结果未定义

(4)、insert

啊,到较为复杂的环节了,我尽力弄得清楚点、、

参数类型 解释
pos 在容器中插入新元素的位置,新元素将插入在position的前面 (从0开始)
str 另一个string对象
subpos str中的起始位置。(从0开始)
sublen 要复制的子字符串的长度
s 指向字符数组的指针(例如char数组)。
c char类型的值
p 一个指向插入点的迭代器,将新内容插入到p指向的字符之前。
n 要插入的字符个数
first, last 指定元素范围的迭代器,将 [first,last)范围内的所有元素副本插入到pos的前面
il 将列表元素{ }内的值插入到pos的前面
(1)插入str的所有内容

string& insert (size_t pos, const string &str)

(2)插入str的子字符串(基于范围)

string& insert (size_t pos, const string &str, size_t subpos, size_t sublen);

(3)插入C风格字符串

string& insert (size_t pos, const char* s);

插入由s指向的以空字符结束的字符串(C风格的字符串)

(4)插入基于范围的C风格字符串

string& insert (size_t pos, const char* s, size_t n);

(5)插入一段相同的字符

string& insert (size_t pos, size_t n, char c);

或者

void insert (iterator p, size_t n, char c);

插入 n 个字符 c

(6)插入单个字符

iterator insert (iterator p, char c);

(7)迭代器插入

void insert (iterator p, InputIterator first, InputIterator last);

插入[first,last)所包含的字符

(8)插入元素值列表 { a, b, c, ... }

string& insert (const_iterator p, initializer_list<char> il);

insert,以上

(5)、erase

string& erase (size_t pos = 0, size_t len = npos);

抹去从 pos 开始,跨度为 len 个字节长度,若无参数,则相当于默认参数,等于了执行成员函数clear

iterator erase (const_iterator p);

抹去 p 所指向的字符

iterator erase (const_iterator first, const_iterator last);

抹去由范围迭代器所表示的区域

(6)、swap

void swap (string& str);

交换的是两个容器的内部参数,交换过程非常高效,放心使用

string字符串的处理

(1)、c_str

const char* c_str()

返回的是以空字符结束的字符串(C风格的字符串)

这个行为最好将返回值拷贝到一个char数组中,因为如果更改string,则返回的指针所表示的内容会被破坏

如:strcpy ( str, S.c_str() );

(2)、find

从前往后查找子串或字符出现的位置。

1、size_t find (const string& str, size_t pos = 0)

从下标pos开始查找str,返回str所在的下标位置,找不到的话返回string::npos

2、size_t find (const char* s, size_t pos = 0)

一样一样,换成了C风格字符串

3、size_t find (const char* s, size_t pos, size_t n)

取 s 中的前 n 个字符参与匹配,pos还是那个意思,从下标pos开始查找str

4、size_t find (char c, size_t pos = 0)

查找单个字符在string中的位置

(3)、rfind

从后往前查找子串或字符出现的位置。

和find差不多嘛,留坑,等有空更

(4)、substr

string substr (size_t pos = 0, size_t len = npos) const;

返回一个子字符串,子字符串从原字符串下标 pos 取 len 个长度产生的。

(5)、compare

这个挺牛的,有空更,先拿出定义

1、int compare (const string& str) const;

2、int compare (size_t pos, size_t len, const string& str) const;

3、int compare (size_t pos, size_t len, const string& str, size_t subpos, size_t sublen);

4、int compare (const char* s)

5、int compare (size_t pos, size_t len, const char* s)

6、int compare (size_t pos, size_t len, const char* s, size_t n)

五、成员常量

npos

static const size_t npos = -1;

size_t的最大值

作为返回值,通常用于表示没有匹配项。


留在结尾的话

提醒自己:

  • 未更如何构造

  • 未更compare

  • 未更 !=, ==, >, < 操作符的使用规则

  • 未更 find 的其它函数如:find_first_of

引用:

[1]:http://c.biancheng.net/view/400.html

[2]:https://blog.csdn.net/qq_27848347/article/details/91284019

[3]:http://www.cplusplus.com/reference/string/string/?kw=string

推荐[4]:https://www.cnblogs.com/zpcdbky/p/4471454.html

C++ string (浅谈)的更多相关文章

  1. Java中Integer和String浅谈

    Java中的基本数据类型有八种:int.char.boolean.byte.long.double.float.short.Java作为一种面向对象的编程语言,数据在Java中也是一种对象.我们用基本 ...

  2. java - String 浅谈

    /** * String s1 = "a"; * 编译器会先检查常量池中是否已经有"a": * 如果没有,则在常量池先创建,后引用. * 如果有,则直接引用; ...

  3. $.ajax()方法详解 ajax之async属性 【原创】详细案例解剖——浅谈Redis缓存的常用5种方式(String,Hash,List,set,SetSorted )

    $.ajax()方法详解   jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为Str ...

  4. 浅谈C++ STL string容器

    浅谈C++ STL string容器 本篇随笔简单讲解一下\(C++STL\)中\(string\)容器的使用方法及技巧. string容器的概念 其实\(string\)并不是\(STL\)的一种容 ...

  5. 浅谈String、StringBuffer与StringBuilder

    浅谈String.StringBuffer与StringBuilder   先详细介绍一下String.StringBuffer与StringBuilder String: 官方对String的说明: ...

  6. 浅谈 Fragment 生命周期

    版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...

  7. 浅谈 LayoutInflater

    浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...

  8. 浅谈Java的throw与throws

    转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...

  9. 浅谈SQL注入风险 - 一个Login拿下Server

    前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...

随机推荐

  1. Test typora

    目录 0. test 0.5 easy test 1. problem 1 2. problem 2 3. problem 3 import numpy as np import matplotlib ...

  2. apiAutoTest: 接口自动化测试的数据清洗(备份/恢复)处理方案

    接口自动化测试之数据清洗/隔离/备份/恢复 在得到QQ:1301559180 得代码贡献之后,想到了通过ssh连接上服务器,然后进行数据库备份,数据库恢复, 主要使用了 paramiko库 最终效果 ...

  3. gears-绕过rbash

    0x00 信息收集 0x01 smb攻击 crunch 生成密码的一个软件 @%%,这个是给的密码参数. crunch 4 4 -t @%%, -o words 最小4位,最长 4位 fcrackzi ...

  4. Linux删除文件后磁盘目录不释放

    今天测试oracle数据库的时候,把表空间连带内容和数据文件一并删除了,但是删除之后,查看数据文件不存在了,但是目录的带下没有释放 SQL> drop tablespace users incl ...

  5. C# ADO.NET连接字符串详解

    C#中连接字符串包含以下内容 参数 说明 Provider 设置或者返回提供的连接程式的名称,仅用于OLeDbConnection对象 Connection Timeout 在终止尝试并产生异常前,等 ...

  6. 关于JDK15的简单理解

    一.为什么要了解JDK15? 2020年9月15日,Oracle官方发布了JDK15版本,及时关注官方的更新动态,可以让我们在日常开发中更合理的选择更加优秀的工具方法,避免使用一些过时的或一些即将被删 ...

  7. 主题模型值LDA

    主题模型(topic model)是以非监督学习的方式对文集的隐含语义结构(latent semantic structure)进行聚类(clustering)的统计模型. 主题模型主要被用于自然语言 ...

  8. Chrome Performance性能分析面板使用

    最近做的项目都是内嵌egret游戏,想在移动端监测下它的性能,于是就开始了对Performance的探索: 一.使用 打开控制台,一顿操作: 网络选择Fast 3G,模拟手机普通3G环境,虽然现在大家 ...

  9. [Poi2012]Rendezvous

    题目描述 给定一个n个顶点的有向图,每个顶点有且仅有一条出边. 对于顶点i,记它的出边为(i, a[i]). 再给出q组询问,每组询问由两个顶点a.b组成,要求输出满足下面条件的x.y: 从顶点a沿着 ...

  10. win 10下Apache和PHP的安装配置

    一.下载Apache 官网下载:https://httpd.apache.org/ 或者百度网盘链接:https://pan.baidu.com/s/17zVFNSfzzwDgFti_fboUSA 提 ...