9、C++ Primer 4th 笔记,string类型

简介: 1、string操作 string s; 定义一个新的空 string 对象,命名为 s string s(cp); 定义一个新的 string 对象,用 cp 所指向的(以空字符null 结束的)C 风格字符串(可以为字符串或字符数组,但是需以null结束)初始化该对象。

1string操作<?xml:namespace prefix = o />

string s;

定义一个新的空 string 对象,命名为 s

string s(cp);

定义一个新的 string 对象,用 cp 所指向的(以空字符null 结束的C 风格字符串(可以为字符串或字符数组,但是需以null结束)初始化该对象。但是,这个数组的所有字符,除null外,都被复制到新创建的string对象中。

string s(s2);

定义一个新的 string 对象,并将它初始化为 s2 的副本

is >> s;

从输入流 is 中读取一个以空白字符分隔的字符串,写入 s

os << s;

s 写到输出流 os getline(is, s) 从输入流 is 中读取一行字符,写入 s

s1 + s2

s1 s2 串接起来,产生一个新的 string 对象

s1 += s2

s2 拼接在 s1 后面

关系操作符

相等运算(== !=)以及关系运算(<<=> >=)都可用于 string 对象的比较,等效于(区分大小写的)字典次序的比较

在某些方面,可将 string 类型视为字符容器。除了一些特殊操作,string 类型提供与 vector 容器相同的操作。string 类型与 vector 容器不同的是,它不支持以栈方式操纵容器:在 string 类型中不能使用 front、back 和 pop_back 操作。

与vector容器的元素一样,string的字符串也是连续存储的。string不支持带有单个容器长度作为参数的构造函数。

其它构造string的方法

string s(cp, n)

创建一个 string 对象,它被初始化为 cp 所指向数组的前 n 个元素的副本

string s(s2, pos2)

创建一个 string 对象,它被初始化为一个已存在的 string 对象 s2 中从下标 pos2 开始的字符的副本

string s(s2, pos2, len2)

创建一个 string 对象,它被初始化为 s2 中从下标 pos2 开始的 len2 个字符的副本。如果 pos2 > s2.size(),则该操作未定义,无论 len2 的值是多少,最多只能复制 s2.size() - pos2 个字符

注意:n、len2 和 pos2 都是 unsigned 值

2、修改string对象的其他方法

与容器共有的string的操作

s.insert(p, t)

在迭代器 p 指向的元素之前插入一个值为 t 的新元素。返回指向新插入元素的迭代器

s.insert(p, n, t)

在迭代器 p 指向的元素之前插入 n 个值为 t 的新元素。返回 void

s.insert(p, b, e)

在迭代器 p 指向的元素之前插入迭代器 b 和 e 标记范围内所有的元素。返回 void

s.assign(b, e)

在迭代器 b 和 e 标记范围内的元素替换 s。对于 string 类型,该操作返回 s;对于容器类型,则返回 void

s.assign(n, t)

用值为 t 的 n 个副本替换 s。对于 string 类型,该操作返回 s;对于容器类型,则返回 void

s.erase(p)

删除迭代器 p 指向的元素。返回一个迭代器,指向被删除元素后面的元素

s.erase(b, e)

删除迭代器 b 和 e 标记范围内所有的元素。返回一个迭代器,指向被删除元素段后面的第一个元素

string类型特有的版本

s.insert(pos,n,c)

在下标为 pos 的元素之前插入 n 个字符 c

s.insert(pos,s2)

在下标为 pos 的元素之前插入 string 对象 s2 的副本

s.insert(pos,s2,pos2,len)

在下标为 pos 的元素之前插入 s2 中从下标 pos2 开始的 len 个字符

s.insert(pos,cp,len)

在下标为 pos 打元素之前插入 cp 所指向数组的前 len 个字符

s.insert(pos, cp)

在下标为 pos 的元素之前插入 cp 所指向的以空字符结束的字符串副本

s.assign(s2)

用 s2 的副本替换 s

s.assign(s2, pos2, len)

用 s2 中从下标 pos2 开始的 len 个字符副本替换 s

s.assign(cp, len)

用 cp 所指向数组的前 len 个字符副本替换 s

s.assign(cp)

用 cp 所指向的以空字符结束的字符串副本替换 s

s.erase(pos, len)

删除从下标 pos 开始的 len 个字符

除非特殊声明,上述所有操作都返回 s 的引用

3、只适用于string类型的操作

表示 求子串

s.substr(pos, n)

返回一个string类型的字符串,它包含s中从下标 pos开始的 n 个字符

s.substr(pos)

返回一个 string 类型的字符串,它包含从下标 pos 开始到s 末尾的所有字符

s.substr()

返回 s 的副本

表示 添加和替换

修改string对象的操作,args在下表中示

s.append( args)

将 args 串接在 s 后面。返回 s 引用

s.replace(pos,len,args)

删除 s 中从下标 pos 开始的 len 个字符,用 args指定的字符替换之。返回s的引用。在这个版本中,args不能为 b2,e2

s.replace(b,e,args)

删除迭代器 b 和 e 标记范围内所有的字符,用 args替换之。返回 s 的引用。在这个版本中,args 不能为 s2,pos2,len2

append,replace操作的参数:args

s2

string 类型的字符串 s2

s2, pos2, len2

字符串 s2 中从下标 pos2 开始的 len2 个字符

cp

指针 cp 指向的以空字符结束的数组

cp, len2

cp 指向的以空字符结束的数组中前 len2 个字符

n, c

字符 c 的 n 个副本

b2, e2

迭代器 b2 和 e2 标记的范围内所有字符

表示 查找

返回 string::size_type 类型的值,以下标形式标记查找匹配所发生的位置;或者返回一个名为 string::npos 的特殊值,说明查找没有匹配。string 类将 npos 定义为保证大于任何有效下标的值。

s.find( args)

在 s 中查找 args 的第一次出现

s.rfind( args)

在 s 中查找 args 的最后一次出现

s.find_first_of( args)

在 s 中查找 args 的任意字符的第一次出现

s.find_last_of( args)

在 s 中查找 args 的任意字符的最后一次出现

s.find_first_not_of( args)

在 s 中查找第一个不属于 args 的字符

s.find_last_not_of( args)

在 s 中查找最后一个不属于 args 的字符

find操作的参数,args

c, pos

在 s 中,从下标 pos 标记的位置开始,查找字符 c。pos 的默认值为 0

s2, pos

在s中,从下标pos标记的位置开始,查找string对象s2。pos 的默认值为 0

cp, pos

在 s 中,从下标 pos 标记的位置形参,查找指针 cp 所指向的 C 风格的以空字符结束的字符串。pos 的默认值为 0

cp, pos, n

在 s 中,从下标 pos 标记的位置开始,查找指针 cp 所指向数组的前 n 个字符。pos 和 n 都没有默认值

表示 比较

除了关系操作符,string类型还提供了一组compare操作,用于实现字典顺序的比较,操作结果类似于C语言中的库函数strcmp。

s.compare(s2)

比较 s 和 s2

s.compare(pos1, n1, s2)

让s中从pos下标位置开始的n1个字符与s2做比较

s.compare(pos1, n1, s2, pos2, n2)

让 s 中从 pos1 下标位置开始的 n1 个字符与 s2 中从 pos2下标位置开始的 n2 个字符做比较

s.compare(cp)

比较 s 和 cp 所指向的以空字符结束的字符串

s.compare(pos1, n1, cp)

让 s 中从 pos1 下标位置开始的 n1 个字符与 cp 所指向的字符串做比较

s.compare(pos1, n1, cp, n2)

让 s 中从 pos1 下标位置开始的 n1 个字符与 cp 所指向的字符串的前 n2 个字符做比较

参考

[1] http://blog.163.com/zhoumhan_0351/blog/static/39954227201031112952296/

目录
相关文章
|
8天前
|
Java API 索引
Java基础—笔记—String篇
本文介绍了Java中的`String`类、包的管理和API文档的使用。包用于分类管理Java程序,同包下类无需导包,不同包需导入。使用API时,可按类名搜索、查看包、介绍、构造器和方法。方法命名能暗示其功能,注意参数和返回值。`String`创建有两种方式:双引号创建(常量池,共享)和构造器`new`(每次新建对象)。此外,列举了`String`的常用方法,如`length()`、`charAt()`、`equals()`、`substring()`等。
14 0
|
21天前
|
存储 C++ 容器
C++入门指南:string类文档详细解析(非常经典,建议收藏)
C++入门指南:string类文档详细解析(非常经典,建议收藏)
31 0
|
21天前
|
存储 编译器 C语言
C++入门: 类和对象笔记总结(上)
C++入门: 类和对象笔记总结(上)
31 0
|
24天前
|
Java
【Java】如果一个集合中类型是String如何使用拉姆达表达式 进行Bigdecimal类型计算?
【Java】如果一个集合中类型是String如何使用拉姆达表达式 进行Bigdecimal类型计算?
25 0
|
17天前
|
JavaScript 前端开发
JavaScript 中如何检测一个变量是一个 String 类型?
JavaScript 中如何检测一个变量是一个 String 类型?
21 2
|
21天前
|
存储 编译器 C语言
C++_String增删查改模拟实现
C++_String增删查改模拟实现
46 0
存储 编译器 Linux
15 0
|
1天前
|
编译器 C++
标准库中的string类(上)——“C++”
标准库中的string类(上)——“C++”
|
12天前
|
存储 算法 C语言
【C++初阶】8. STL初阶 + String类
【C++初阶】8. STL初阶 + String类
47 1
|
12天前
|
C语言 C++
【C++初阶】9. string类的模拟实现
【C++初阶】9. string类的模拟实现
36 1