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/

目录
相关文章
|
10天前
|
存储 安全 C语言
C++ String揭秘:写高效代码的关键
在C++编程中,字符串操作是不可避免的一部分。从简单的字符串拼接到复杂的文本处理,C++的string类为开发者提供了一种更高效、灵活且安全的方式来管理和操作字符串。本文将从基础操作入手,逐步揭开C++ string类的奥秘,帮助你深入理解其内部机制,并学会如何在实际开发中充分发挥其性能和优势。
|
13天前
|
C++
模拟实现c++中的string
模拟实现c++中的string
|
3月前
|
C语言 C++ 容器
【c++丨STL】string模拟实现(附源码)
本文详细介绍了如何模拟实现C++ STL中的`string`类,包括其构造函数、拷贝构造、赋值重载、析构函数等基本功能,以及字符串的插入、删除、查找、比较等操作。文章还展示了如何实现输入输出流操作符,使自定义的`string`类能够方便地与`cin`和`cout`配合使用。通过这些实现,读者不仅能加深对`string`类的理解,还能提升对C++编程技巧的掌握。
160 5
|
3月前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
104 2
|
4月前
|
C++ 容器
|
4月前
|
存储 安全 C++
【C++打怪之路Lv8】-- string类
【C++打怪之路Lv8】-- string类
47 1
|
4月前
|
C++ 容器
|
4月前
|
C++ 容器
|
4月前
|
存储 C++ 容器
|
4月前
|
安全 C语言 C++
【C++篇】探寻C++ STL之美:从string类的基础到高级操作的全面解析
【C++篇】探寻C++ STL之美:从string类的基础到高级操作的全面解析
71 4