STL之string
2016-05-24 15:05
513 查看
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);
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性