首页 > 代码库 > STL之string

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‘] == ‘\0‘

把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);