• STL之string


    一、介绍

    1、STL是C++的一部分,做到了数据结构和算法的分离,具有高度的可重用性、高性能、高度的可移植性、跨平台的优点。

    2、字符串string的使用方法:全面介绍了string类的构造、赋值、连接、比较、子串、查找、插入、删除、替换、wstring和统一编码等方面。

    STL  简介:分为三类:container(容器)、iterator(迭代器)、algorithm(算法)。

    它们之间的关系:  

    clip_image002

    二、string 与 char* 异同

    1 string是一个类,char*是一个指向char型的指针。

             string封装了char*,管理这个字符串封装了char*,是一个char*型的容器,使用灵活性强便于功能扩展。

    2 不用考虑内存释放和越界

             String封装了char*,负责管理char*字符串,管理为char*所分配的内存。

             每一次string的复制,取值都由string类负责维护,不用担心复制越界和取值越界等。

    3  string支持运算

    重载运算符:

             string a;string b;string c;

             相加运算: c = a + b      ;

    比较运算:a > b,          a != b;

    4  能提供系列字符串操作函数

             查找find,拷贝copy,删除delete

             替换replace,插入insert

    5 支持扩展

             使用静态内存或者动态内存

             使用资源ID加载字符串

             操作安全使用锁

    最本质的区别就是:string是一个类,char是基本类型,string封装了char。(此处出自http://www.cnblogs.com/bastard/archive/2012/01/07/2315885.html

    三、string 用法:

    1.string的构造函数

    默认构造函数: string s1; string s2;

    拷贝构造函数: string s1(s2);

    带参数的构造函数:string strA("daweige");string strB(5,'D');

    2.string的存取字符操作

    string strA("daweige");

    char c = strA[2];         //调用 const char &operator[] (int n) const;

    char d = strA.at(3);    //调用 const char &at(int n) const;

    strA[3] = 'E';               //调用 char &operator[] (int n);

    strA.at(5) = 'G';           //调用 char &at(int n);

    str.at(7)越界,抛出out_of_range异常, 可用try{}catch{}捕获

    str[7] == (char)0,

    str.at(8)越界,抛出out_of_range异常,可用try{}catch{}捕获

    str[8]编译器直接报错,不可以用try{}catch{}捕获

    从string取得const char*的操作

    const char *cpch = str.c_str();

    cpch[0] == 'd' cpch[1] =='a' cpch['7'] == ''

    把string拷贝到char*指向的内存空间的操作

    char e[8] = {0}; //申请空间

    int iCount = strA.copy(e,7,0); //iCount==7

    3.string的赋值

    string strC;

    strC = strA;

    strC.assign("daweige");

    strC.assign("daw");

    strC.assign(strA);

    strC.assign(5,'W');

    strC.assign(strA,2,3);

    4.string的连接

    string strD("Hello ");

    strD += strA; //此时strA内容为 "Hello daweige"

    strD += "daweige";

    strD.append("daweige");

    strD.append("daweige", 3);

    strD.append(strA);

    strD.append(strA,0,3);

    strD.append(5,'d');

    string的子串:

    string strE = strA.substr(2,3); //此时strE内容为 "wei"

    5.string的查找

    int iPos = strA.find('w',0); //此时iPos为2,函数的第二个参数可不写

    iPos = strA.find("awe",0); //此时iPos为3,函数的第二个参数可不写

    string strF = "aw"; iPos = strA.find(strF,0); //此时iPos为1,函数的第二个参数可不写

    iPos = strA.rfind('w',0); //此时iPos为2,函数的第二个参数可不写

    iPos = strA.rfind("eig",0); //此时iPos为3,函数的第二个参数可不写

    iPos = strA.rfind(strE,0); //此时iPos为1,函数的第二个参数可不写

    6.string的替换

    string strF("abcdefg");

    strF.replace(1,3,"xyzxyz"); //此时strF的内容为 "axyzxyzefg"

    编码统一化,编写单一源代码

    tchar *pt = _T("daweige");

    tstring tstr(pt);

    tstring tstrSub = tstr.substr(2,3);

  • 相关阅读:
    洛谷 AT2000 Leftmost Ball
    洛谷 P1326 足球
    洛谷 P4868 Preprefix sum
    洛谷 P2596 [ZJOI2006]书架
    HDU 3415 Max Sum of Max-K-sub-sequence
    洛谷 P3901 数列找不同
    洛谷 P3609 [USACO17JAN]Hoof, Paper, Scissor蹄子剪刀…
    洛谷 P5749 [IOI2019]排列鞋子
    验证码解决表单重复的原理
    session和浏览器之间的技术内幕
  • 原文地址:https://www.cnblogs.com/qunews/p/3725407.html
Copyright © 2020-2023  润新知