http://hi.baidu.com/%C5%E1%F6%CE0227/blog/item/efaa4ce65d795b29b9382093.html
一. 标准库string 类型:
初始化string 对象
-------------------------------------------------------------------------------
string s1 默认构造函数, s1 为空串;
string s2(s1) 将s2 初始化为s1 的一个副本;
string s3("value") 将s3 初始化为一个字符串字面值副本;
string s4(n, 'c') 将s4 初始化为字符'c' 的n 个副本;
string s5(cp); 用C 风格的字符串初始化s5, (char cp[]);
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
string s1 默认构造函数, s1 为空串;
string s2(s1) 将s2 初始化为s1 的一个副本;
string s3("value") 将s3 初始化为一个字符串字面值副本;
string s4(n, 'c') 将s4 初始化为字符'c' 的n 个副本;
string s5(cp); 用C 风格的字符串初始化s5, (char cp[]);
-------------------------------------------------------------------------------
string 对象的操作
-------------------------------------------------------------------------------
s.empty() 若为空则返回true , 否则返回false ;
s.size() 返回s 中字符的个数;
s[n] 取值操作, 位置从0 开始;
s1+s2 字符串连接操作;
s1 = s2 赋值操作;
!= , <, <=, >, >= 保持惯有属性;
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
s.empty() 若为空则返回true , 否则返回false ;
s.size() 返回s 中字符的个数;
s[n] 取值操作, 位置从0 开始;
s1+s2 字符串连接操作;
s1 = s2 赋值操作;
!= , <, <=, >, >= 保持惯有属性;
-------------------------------------------------------------------------------
二. 结合顺序容器, 再谈string 类型:
string 可以看成一种特殊的字符容器.
string 可以看成一种特殊的字符容器.
001. 初始化string 的其他方法
-------------------------------------------------------------------------------
string s(cp, n) 创建一个string 对象, 它被初始化为cp 所指向数组的前个元素
-------------------------------------------------------------------------------
string s(cp, n) 创建一个string 对象, 它被初始化为cp 所指向数组的前个元素
的副本;
string s(s2, pos2) 创建一个string 对象, 它被初始化为一个已存在的string 对象
string s(s2, pos2) 创建一个string 对象, 它被初始化为一个已存在的string 对象
s2 中从下标pos2 开始的字符的副本. 若 pos2 > s2.size
(), 则操作未定义.
string s(s2, pos2, len2) 创建一个string 对象, 它被初始化为s2 中从下标pos2 开始的
string s(s2, pos2, len2) 创建一个string 对象, 它被初始化为s2 中从下标pos2 开始的
len2 个字符的副本. 若 pos2 > s2.size(), 则操作未定义.
注: n , len2, pos2 都是 unsigned 值.
-------------------------------------------------------------------------------
002.
string 类型作为一个特殊的容器, 与容器共有所有容器操作:
-------------------------------------------------------------------------------
002.
string 类型作为一个特殊的容器, 与容器共有所有容器操作:
c.insert(p, t) 在迭代器p 的前边插入t, 返回指向新添加元素的迭代器.
c.insert(p, n, t) 在迭代器p 的前边插入n 个t, 返回void.
c.insert(p, b, e) 在迭代器p 的前边插入迭代器b 和e 标记范围内的元素, 返回void.
c.assign(b, e) 重新设置c 的元素: 将迭代器b 和e 标记的范围内所有元素复制到c
c.insert(p, n, t) 在迭代器p 的前边插入n 个t, 返回void.
c.insert(p, b, e) 在迭代器p 的前边插入迭代器b 和e 标记范围内的元素, 返回void.
c.assign(b, e) 重新设置c 的元素: 将迭代器b 和e 标记的范围内所有元素复制到c
中, b 和e 必须不是指向c 中元素的迭代器;
c.assign(n, t) 将容器c 重新设置为存储n 个值为t 的元素;
c.erase(p) 删除迭代器p 指向的元素, 返回被删除元素后边元素的迭代器.
c.erase(b, e) 删除迭代器b 和e 范围内的元素, 返回被删除段后面元素的迭代器.
c.assign(n, t) 将容器c 重新设置为存储n 个值为t 的元素;
c.erase(p) 删除迭代器p 指向的元素, 返回被删除元素后边元素的迭代器.
c.erase(b, e) 删除迭代器b 和e 范围内的元素, 返回被删除段后面元素的迭代器.
002. 修改string 对象的方法(string 特有的操作)
-------------------------------------------------------------------------------
s.insert(pos, n, c) 在下标为pos 的元素之前插入n 个字符c ;
s.insert(pos, s2) 在下标为pos 的元素之前插入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.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.append(args) 将args 串接在s 后面;
s.replace(pos, len, args) 删除s 中从下标pos 开始的len 个字符, 用args 指定的字符
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.append(args) 将args 串接在s 后面;
s.replace(pos, len, args) 删除s 中从下标pos 开始的len 个字符, 用args 指定的字符
替换之;(在这个版本中, args 不能为b2, e2)
s.replace(b, e, args) 删除迭代器b 和e 标记的范围内的所有字符, 用args 替换之;
(在这个版本中, args 不能为s2, pos2, len2)
s.replace(b, e, args) 删除迭代器b 和e 标记的范围内的所有字符, 用args 替换之;
(在这个版本中, args 不能为s2, pos2, len2)
注: 除特殊声明, 上述所有操作都返回的s 引用 .
-------------------------------------------------------------------------------
****** 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 标记的范围内的所有字符.
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
****** 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 标记的范围内的所有字符.
-------------------------------------------------------------------------------
003. string 对象的子串操作
-------------------------------------------------------------------------------
s.substr(pos, n) 返回一个string 类型的字符串, 它包含s 中从下标pos 开始的n 个字
-------------------------------------------------------------------------------
s.substr(pos, n) 返回一个string 类型的字符串, 它包含s 中从下标pos 开始的n 个字
符;
s.substr(pos) 返回一个string 类型的字符串, 它包含s 中从下标pos 开始到s 末尾的
s.substr(pos) 返回一个string 类型的字符串, 它包含s 中从下标pos 开始到s 末尾的
所有字符;
s.substr() 返回s 的副本.
-------------------------------------------------------------------------------
string 类型的查找操作
-------------------------------------------------------------------------------
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 的默认值为
s.substr() 返回s 的副本.
-------------------------------------------------------------------------------
string 类型的查找操作
-------------------------------------------------------------------------------
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 风格字符串.
cp, pos 在s 中, 从下标pos 标记的位置开始, 查找指针cp 所指向的C 风格字符串.
pos 的默认值为0 ;
cp, pos, n 在s 中, 从下标pos 标记的位置开始, 查找指针cp 所指向数组的前n 个字符.
cp, pos, n 在s 中, 从下标pos 标记的位置开始, 查找指针cp 所指向数组的前n 个字符.
pos 和 n 无默认值;
------------------------------------------------------------------------------
string name("AnnaBelle");
string::size_type pos1= name.find("Anna"); // pos1= 0 ;
string numerics("0123456789");
string name("r2d2");
string::size_type pos= name.find_first_of(numerics); // pos= 1 ;
------------------------------------------------------------------------------
string name("AnnaBelle");
string::size_type pos1= name.find("Anna"); // pos1= 0 ;
string numerics("0123456789");
string name("r2d2");
string::size_type pos= name.find_first_of(numerics); // pos= 1 ;
string::size_type pos= 0;
while((pos= name.find_first_of(numerics, pos)) != string::npos)
{
cout<<"found number at index: "<<pos<<" elements is "<<name[pos]<<endl;
++pos;
}
while((pos= name.find_first_of(numerics, pos)) != string::npos)
{
cout<<"found number at index: "<<pos<<" elements is "<<name[pos]<<endl;
++pos;
}
string numbers("0123456789");
string dept("03714p3");
string::size_type pos= dept.find_first_not_of(numbers); // pos= 5 ;
string dept("03714p3");
string::size_type pos= dept.find_first_not_of(numbers); // pos= 5 ;
string river("Mississippi");
string::size_type first_pos= river.find("is"); // return 1 ;
string::size_type last_pos= river.find("is"); // return 4 ;
string::size_type first_pos= river.find("is"); // return 1 ;
string::size_type last_pos= river.find("is"); // return 4 ;
004. string 类型的 compare 操作
-------------------------------------------------------------------------------
s.compare(s2) 比较s 和s2 ;
s.compare(pos1, n1, s2) 让s 中从pos1 下标位置开始的n1 个字符与s2 作比
-------------------------------------------------------------------------------
s.compare(s2) 比较s 和s2 ;
s.compare(pos1, n1, s2) 让s 中从pos1 下标位置开始的n1 个字符与s2 作比
较;
s.compare(pos1, n1, s2, pos2, n2) 让s 中从pos1 下标位置开始的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(cp) 比较s 和cp 所指向的以空字符结束的字符串;
s.compare(pos1, n1, cp) 让s 中从pos1 下标位置开始的n1 个字符与cp 指向字
符串作比较;
s.compare(pos1, n1, cp, n2) 让s 中从pos1 下标位置开始的n1 个字符与cp 指向字
s.compare(pos1, n1, cp, n2) 让s 中从pos1 下标位置开始的n1 个字符与cp 指向字
符串的前n2 个字符作比较;
s1 > s2 为正; s1 == s2 为零; s1 < s2 为负.
-------------------------------------------------------------------------------
s1 > s2 为正; s1 == s2 为零; s1 < s2 为负.
-------------------------------------------------------------------------------