c++ String 类函数详解

c++ String 类函数详解

总算抽出时间把string类里的函数好好研究一遍,在VS2013里完整运行了一遍,加深了一下理解:

代码块

#include < iostream >
 #include < string >
using namespace std;

void main()
{

    string s = "asdssfghjkl";
    char a1;
    string::iterator it;
    string::const_iterator cit;
    string::size_type n;

    s.append("zxcv");  //s="asdssfghjklzxcv",参数必须为string类型 不可为char。
    s.assign("qwert"); //s="qwert",相当于赋值操作,赋以新值 ,参数不可为char。
    a1 = s.at(0);      //a1='q' 下标操作
    a1 = s.back();     //a1='t'   返回最后一个字符
    it = s.begin();    //返回字符串起始位置的迭代器,cit = s.begin(); 正确
    a1=it[0];          //s ="qwert", a1='q',a=cit[0]; 正确
    it[3] = 'f';       //s ="qweft",cit[3] = 'f';  错误

    n = s.capacity();       //s="qwert" n=15(win64 vs2013) 
    /*
     给字符串分配内存的时候,并不是有多大长度分配多少的,考虑到append等操
     作,一次分配内存是比给他的字符串长度多的。这样在append的时候,就不用   
     每次都分配内存了。除非append时,已分配内存不够了,会再次追加一次内存 
     分配。当前已经分配的内存大小,就是capacity。字符串实际大小,就是  
     size。这样做是为了提高字符串操作效率。capacity是容量,是可存放字符 
     的个数。size是大小,是当前已存放字符的个数。capacity >= size, 具
     体capcacity大多少,具体的stl库实现决定。capacity是可增大的,如果当
     前size加上要加入的字符个数超过capacity,capacity就要增大,一般翻倍
     增长,具体取决于实现。
    */

    cit=s.cbegin();    //s="qweft",返回字符串起始位置的const型迭代器
    a1 = cit[1];       // a1='w'
    /*
    1.iterator,const_iterator作用:遍历容器内的元素,并访问这些元素的 
    值。iterator可以改元素值,但const_iterator不可改。跟C的指针有点像
    2.const_iterator 对象可以用于const vector 或非 const vector,它 
    自身的值可以改(可以指向其他元素),但不能改写其指向的元素值. 如 cit[1]  
    = 'o' 错误
    */

    cit = s.cend();   //cit = " ",返回字符串末尾的 const型迭代器
    s.clear();        //删除字符串里的所有字符

    s = "asdfg";
    int n1=s.compare("asdfg");     //n1=0  字符串比较
    int n2 = s.compare("sdfg");    //n1=-1
    int n3 = s.compare("ab");      //n1=1

    char* sdest;
    n=s.copy(sdest,1,0);    //会报unsafe的问题
    /*      
    size_type copy( CharT* dest,  size_type count,  size_type   
    pos = 0);
    参数:
    dest  pointer to the destination character string
    pos  position of the first character to include
    count  length of the substring
    返回值:
    copy的字符个数   
    从string类型对象中至多复制count个字符到字符指针dest指向的空间中。默 
    认从首字符开始,但是也可以指定,开始的位置(记住从0开始)。返回真正从对 
    象中复制的字符。用户要确保p指向的空间足够保存n个字符。
    */


    string::const_reverse_iterator it2; 
    it2=s.crbegin();  /*返回const翻转迭代器,将s先翻转,再取其begin。
    it2[2] = 'g';错误。it2=" ",相当于取到s的最后一个元素 ++是往s的前
    面取。*/

    a1 = it2[0];      //a1='g'
    a1 = it2[1];      //a1='f'  
    it2 = s.crend();  /*返回const翻转迭代器,将s先翻转,再取其end。
    it2 = "asdfg"; char a3 = it2[0]; char a4 = it2[1]; 错误溢出。 
    相当于取到s的第一个元素前一个。与cbegin cend 相反。*/

    const char* s1;
    s1=s.c_str();   /*s1="asdgf",c_str()返回的是一个临时指针,不能 
    对其进行操作,s中字符删除s1也就没了,s1是c字符串,末尾追加\0。*/
    /* 
    const char* c;    
    string s="1234";  
    c = s.c_str();    
    cout<<c<<endl; //输出:1234                 
    s="
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值