STL容器--string

.4.2. 2 string类型

       String支持大多数的顺序容器的操作,在某些方面,可以将string类型视为字符容器。除了一些特殊的操作,string类型提供与vector容器相同的操作 。string类型与vector容器不同的是,它不支持以栈的操作容器 :在string类型中不能使用front、back和pop_back、pop_front操作。

      

       string s("hello");

     string::iterator iter=s.begin();

     while (iter!=s.end())

     {

         cout<<*iter++<<endl;

     }


构造string对象的其它方法:

Strings1;                       //s1是一个空串

Strings2(5,’a’);                   //s2=”aaaaa”

Strings3(s2);                    //s3 s2copy

Strings4(s3.begin(),s3.begin()+s3.size()/2);  //s4=”aa”

 

Strings5(cp)                     //定义一个新的string对象,用cp所指向的( 以空字符NULL结束的) C风格字符串初始化该对象;

 

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

 

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

 

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

 

另外 一种构造函数需要一个指向字符数组元素的指针和一个标记要复制多少字符的计数器作参数,由于该构造函数有一个计数器,因此数组不必以空字符结束:

 

举例如下:

Char*cp=”Hiya”;

Charc_array[]=”world!!!!”;

Charno_null={‘H’,’i’};

Strings1(cp);                //oks1=”Hiya”

Strings2(c_array,5);      //ok s2=”world”

Strings3(c_array+5,4);  //oks3=”!!!!”

Strings4(no_null);        //错误,没有结束标记

Strings5(no_null,2)      //ok s5=”Hi”

使用只有一个指针参数的构造函数定义s1,该指针指向以空字符结束的数组中的第一个字符。这个数组的所有字符,但不包括结束符null,都被复制到新创建的string对象中。

 

Strings6(s1,2);     //     s6=”ya”

Strings7(s1,0,2);          //  s7=”Hi”

Strings8(s1,0,8);          //  s8=”Hiya”

 

与容器共有的string操作:

Insert

Assign

Erase

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 个字符

 

只适用于 string 类型的操作:

Substr      //求子串

Append      //

Replace

find

 

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

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

s.substr()          //返回 s 的副本

 

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

s.append( args)  //将 args 串接在 s 后面。返回 s 引用

s.replace(pos, len, args) //删除 s 中从下标 pos开始的 len 个字符,用 args 指定的字符替换之。返回 s 的引用

s.replace(b, e, args) //删除迭代器 b 和 e 标记范围内所有的字符,用 args 替换之。返回 s 的引用

s.find( args)   //在 s 中查找 args 的第一次出现

 

    string s("C++ Primer");        // initialize s to "C++ Primer"
     s.append(" 3rd Ed.");          // s == "C++ Primer 3rd Ed."
     // equivalent to s.append(" 3rd Ed.")
     s.insert(s.size(), " 3rd Ed.");
 
  // starting at position 11, erase 3 characters and then insert "4th"
     s.replace(11, 3, "4th");          // s == "C++ Primer 4th Ed."
     // equivalent way to replace "3rd" by "4th"
     s.erase(11, 3);                   // s == "C++ Primer Ed."
     s.insert(11, "4th");              // s == "C++ Primer 4th Ed."

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值