1、string操作
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/