More about the Operations of string

本文详细介绍了 C++ 中 string 类型的构造方法、修改方法及独有的操作特性,包括子串提取、追加替换和查找等功能,并解释了 string 对象的比较规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2010-4-2 wcdj

string 类型 ( 在某些方面,可将 string 类型视为字符容器 ) 提供与 vector 容器相同的操作, string 类型与 vector 容器不同的是,它不支持以栈方式操纵容器。 string 类型还支持其特有的容器操作。

 

l        构造 string 对象的方法

string 类不支持带有单个容器长度作为参数的构造函数。

string 所支持的构造函数

(1) 不提供任何参数,则得到空的 string 对象

string s1;// s1 is the empty string

(2) 将新对象初始化为另一个 string 对象的副本

string s1(“abcde”);

string s2(s1);// s2==”abcde”

(3) 用一对迭代器初始化 ( 注意:不包括右迭代器所指元素 )

string s3(s2.begin, s2.begin()+s2.size()/2);// s3==”ab”

(4) 使用一个计数器和一个字符初始化

string s4(5, ‘a’);// s4==”aaaaa”

string 类型还提供了 3 种其他的方式创建该类对象

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

string s(cp, n);

(6) 创建一个 string 对象,它被初始化为一个已存在的 string 对象 s2 中从下标 pos2 开始的字符的副本,如果 pos2>s2.size() ,则该操作未定义

string s(s2, pos2);

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

 

string s(s2, pos2, len2);

注:上述, n len2 pos2 都是 unsigned

 

l        修改 string 对象的方法

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 标记范围内所有的元素。返回一个迭代器,指向被删除元素段后面的第一个元素 (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 的引用

 

l        只适用于 string 类型的操作

string 类型提供了容器类型不支持的其他几种操作。

(1) substr 函数,返回当前 string 对象的子串。

(2) append replace 函数,用于修改 string 对象。

(3) 一系列 find 函数,用于查找 string 对象。

子串操作

s.substr(pos, n)

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

s.substr(pos)

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

s.substr()

返回 s 的副本

string 类型提供了 6 append 重载函数版本和 10 replace 版本。

特有的修改 string 对象的操作

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 标记的范围内所有字符

 

l        string 类型的查找操作

string 类型提供了 6 种查找函数,每种函数以不同形式的 find 命名。 ( 此部分内容在以前的文章中总结过 )

string Search Operations

s.find(args)

Find first occurrence of args in s.

s.rfind(args)

Find last occurrence of args in s.

s.find_first_of(args)

Find first occurrence of any character from args in s.

s.find_last_of(args)

Find last occurrence of any character from args in s.

s.find_first_not_of(args)

Find first character in s that is not in args.

s.find_last_not_of(args)

Find last character in s that is not in args.

Arguments to string find Operations

c, pos

Look for the character c starting at position pos in s.pos defaults to 0 .

s2, pos

Look for the string s2 starting at position pos in s.pos default to 0 .

cp, pos

Look for the C-style null-terminated string pointed to by the pointer cp. Start looking starting at position pos in s.pos defaults to 0 .

cp, pos, n

Look for the first n characters in the array pointed to by the pointer cp. Start looking starting at position pos in s. No default for pos or n.

 

l        string 对象的比较

string 类型定义了所有关系操作符,即 ==, !=, <, <=, >, >= 运算。 string 对象采用字典顺序比较。除了关系操作符, string 类型还提供了一组 compare 操作,用于实现字典顺序的比较。 ( 这些操作的结果类似于 C 语言中的库函数 strcmp)

string 类型的 compare 操作

s.compare(s2)

比较 s s2

s.compare(pos1, n1, s2)

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

s.compare(pos1, n1, 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 个字符做比较

compare 函数的返回值

正数

s1 大于 args 所代表的 string 对象

负数

s1 小于 args 所代表的 string 对象

0

s1 等于 args 所代表的 string 对象

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值