首页 > 代码库 > c++ --string操作

c++ --string操作

顺序容器--额外的string操作

  除了顺序容器共同的操作之外,string类型还提供了一些额外的操作。这些操作中大致可以分为两部分:

  1. 提供string类和C风格字符出租之间的相互转换

  2. 增加了允许我们用下标代替迭代器的版本。

 


构造string的其他方法

构造string的其他方法            
n,len2和pos2都是无符号值                                                                                                                          
string s(cp,n)s是cp 指向的数组中前n 个字符的拷贝。此数组至少应该包含n个字符
string s(s2,pos2)s是string s2 从下标pos2 开始的字符的拷贝。若pos2>s2.size(),构造函数的行为未定义。
string s(s2,pos2,len2)

s是string s2 从下标pos2 开始len2 个字符的拷贝。若pos2 > s2.size(),构造函数的行为未定义。不管len2 的值是多少,

构造函数至多拷贝s2.size()-pos2个字符。

   这些构造函数接受一个string 或一个const char* 参数,还接受(可选的)指定拷贝多少个字符的参数(pos2,len2)

substr(pos,n) 操作

  substr操作返回一个string,它是原始string的一部分货全部的拷贝。可以传递给substr 一个可选的开始位置和计数值:

  string s("hello world");

   //返回一个string,包含s 中从pos 开始的n 个字符的拷贝。pos的默认值为0。n的默认值为s,size()-pos, 即拷贝从pos开始的所有字符

  string s1=s.substr(pos,n);   

改变string的其他方法

 

修改string 的操作                               常用场景                                    
s.assign(args)将s 中的字符替换为args 指定的字符。返回一个指向s 的引用替换s 中的所有内容
s.append(args)将args 追加到s末尾。返回一个指向s 的引用。将新字符追加到s 末尾
s.insert(pos,args)

在pos 之前插入args 指定的字符。pos 可以使一个下标或一个迭代器。

接受下标的版本返回一个指向s 的引用;接受迭代器的版本返回指向第一个插入字符的迭代器。

在给定位置之前插入新字符
s.replace(range,args)

删除s 中range 内的字符,替换为args 指定的字符。

range 或者是一个下标和一个长度,或者是一对指向s 的迭代器。返回一个指向s 的引用。

删除指定范围字符,并插入新字符

(新旧字符长度可以不一样长)

   新字符可以来自于:1. 另一个string;2. 一个字符指针(指向的字符数组);3. 一个花括号包围的字符列表。当字符来自于一个string 或一个字符指针时,我们可以传递一个额外的参数来控制是拷贝部分还是全部字符。例如,s.insert(0, s2, 0, s2.size());    //在s[0]之前插入s2 中s2[0] 开始的s2.size() 个字符。

  并不是每个函数都支持所有形式的参数。例如,insert 就不支持下标和初始化列表参数。类似的,如果我们希望用迭代器指定插入点,就不能用字符指针指定新字符的来源。

string 搜索操作

  string 类提供了6个不同的搜索函数,每个函数都有4个重载版本。每个搜索操作都返回一个string::size_type (无符号类型)值,表示匹配发生位置的下标。如果未找到,返回npos (初始化为-1)。

  

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 中的字符

args 必须是以下形式之一

注意:第2个参数才表示位置,与前面改变string 的成员函数不一样
c, pos从s 中位置pos开始查找字符c. pos 默认为0
s2, pos

从s 中位置pos 开始查找字符串s2。 pos默认为0

cp, pos

从s 中位置pos 开始查找指针cp 指向的以空字符结尾的C 风格字符串。

pos 默认为0

cp, pos, n

从s 中位置pos 开始查找指针cp 指向的数组的前n 个字符。

pos 和n 无默认值

 compare函数

  标准库string 类型提供了一组compare 函数,类似C 标准库的strcmp 函数,根据s 是等于、大于还是小于参数指定的字符串,s.compare(args) 返回0,正数或负数。

  根据参数的不同,compare函数有6个重载版本。具体args 形式参见c++ primer P327,表9.15.

数值转换

  新标准引入了多个函数,可以实现数值数据与标准库string之间的转换

  具体转换函数,参见c++primer P328,表9.16.

 


 

c++ --string操作