STL学习笔记-- string
2013-04-09 18:16
309 查看
[b]string 基本字符序列容器[/b]
C语言并没有提供一个专门的字符串类型,需要通过字符数组,对字符串进行存储和处理。字符数组的末尾是一个值为 0 的 null 字符,表示字符串的结束。从而,一个用于存储 n 个字符的字符数组,字符个数为 n+1 。基于这样的字符数组,就可实现字符串的字符添加、删除、搜索、替换、连接和子串操作等。
在标准 C++ 中,字符串类 string 由 C++ STL 实现,提供丰富的字符串的处理功能。string 是一个基于字符的序列容器,具有vector向量容器一样的内部线性结构,字符逐一写入容器,最后以 null 字符结束。虽然 vector<char> 的成员函数也具有一定的字符串操作性质,但是不及string 接口丰富,易于使用和扩充容器。
使用 string 基本字符序列容器,必须先通过宏语句 "#include <string>" 将 string 的实现代码包含进来,才可编译程序。
创建 string 对象
字符串的操作,需要先用 string 类型的构造函数,构造出一个 string 对象,为随后添加的字符分配内存,并初始化 string 对象的内部变量。如下是它的几个常用的构造函数原型。
1. string()
默认的构造函数,用于创建一个不包含任何非空字符的 string 对象。
例如,下面一行代码创建空的 string 对象 s .
string s;
2 string(const string& s, size_type pos = 0, size_type n=npos)
拷贝构造函数,将 string 对象 s 的 [pos, pos+n) 中的字符拷贝到新创建的 string 对象空间中,其中 string::npos 已定义为 -1。当 pos取值0,n取值 string::npos 时,就是用整个字符串 s 拷贝创建一个新的 string 对象。
例如,下面代码拷贝创建 string 对象 s2
// string s1;
string s2(s1);
3. string(const char*)
将 char* 数组的字符拷贝到新创建的 string 对象空间中。
例如,下面代码将字符数组 cArray 的3个字符,拷贝到 string 对象 s 中。
char* cArray="abc";
string s(cArray); // s 包含字符 'a', 'b', 'c' 和一个 null 字符
string 的其他常用函数用法
-------------------------- string 小结
string 是一个字符序列容器,可自动管理字符的内存分配。教之传统的 char* 字符数组, string 提供了十分丰富函数用于字符的添加、删除、替换、查找和比较等。由于篇幅有限,相当多的函数并未列出,读者可参考 C++STL 的帮助文档。
string 缺点:在查找方面,string没有set、map快。这是他的一个缺点。
string 优点:字符串操作方面,是他的强项。。。。
============当你们看到这里的时候,我想说,你们有福了。
我有个《葵花宝典》和你们分享: http://vdisk.weibo.com/s===================
C语言并没有提供一个专门的字符串类型,需要通过字符数组,对字符串进行存储和处理。字符数组的末尾是一个值为 0 的 null 字符,表示字符串的结束。从而,一个用于存储 n 个字符的字符数组,字符个数为 n+1 。基于这样的字符数组,就可实现字符串的字符添加、删除、搜索、替换、连接和子串操作等。
在标准 C++ 中,字符串类 string 由 C++ STL 实现,提供丰富的字符串的处理功能。string 是一个基于字符的序列容器,具有vector向量容器一样的内部线性结构,字符逐一写入容器,最后以 null 字符结束。虽然 vector<char> 的成员函数也具有一定的字符串操作性质,但是不及string 接口丰富,易于使用和扩充容器。
使用 string 基本字符序列容器,必须先通过宏语句 "#include <string>" 将 string 的实现代码包含进来,才可编译程序。
创建 string 对象
字符串的操作,需要先用 string 类型的构造函数,构造出一个 string 对象,为随后添加的字符分配内存,并初始化 string 对象的内部变量。如下是它的几个常用的构造函数原型。
1. string()
默认的构造函数,用于创建一个不包含任何非空字符的 string 对象。
例如,下面一行代码创建空的 string 对象 s .
string s;
2 string(const string& s, size_type pos = 0, size_type n=npos)
拷贝构造函数,将 string 对象 s 的 [pos, pos+n) 中的字符拷贝到新创建的 string 对象空间中,其中 string::npos 已定义为 -1。当 pos取值0,n取值 string::npos 时,就是用整个字符串 s 拷贝创建一个新的 string 对象。
例如,下面代码拷贝创建 string 对象 s2
// string s1;
string s2(s1);
3. string(const char*)
将 char* 数组的字符拷贝到新创建的 string 对象空间中。
例如,下面代码将字符数组 cArray 的3个字符,拷贝到 string 对象 s 中。
char* cArray="abc";
string s(cArray); // s 包含字符 'a', 'b', 'c' 和一个 null 字符
string 的其他常用函数用法
/* 其他常用函数 string 字符串还有以下几个比较常用的函数,如下是他们的使用原型说明。 size_type length() // 字符串的非空字符个数,即字符串的长度 size_type size() // 返回字符串的长度 bool empty() // 字符串是否为空,空则返回 1,否则返回 0 const char* c_str() // 将string 对象转换为 c 字符数组。 (***) */ -------------------------------------------------------- string 的其他常用函数用法 #include <string> #include <iostream> using namespace std; int main() { string str; // 空字符串,返回 1 cout << str.empty() << endl; str += "1234567"; cout << str.empty() << endl; // 不为空,返回0 cout << str.size() << endl; // 7个字符,返回7 cout << str.length() << endl; // 返回 7 // 转换为字符数组 cArray const char* cArray=str.c_str(); // 返回字符 3 cout << cArray[2] << endl; return 0; }
// 补充几个其他的用法: 数组方式访问,或者.at() 函数方式访问。 #include <string> #include <iostream> using namespace std; int main() { string s1 = "abcdefghijklmnopqrst"; char chA = s1[3]; // 将第4个字符赋给chA,chA值为d char chB = s1.at(5); // 将第5个字符赋给chB,chB值为f char chC = s1[50]; // 数组越界 // char chD = s1.at(50); // 产生out_of_rang 异常,可以用try,catch捕获异常 cout << s1.c_str() << endl; // 输出字符串 s1 return 0; } string 的赋值 string &operator=(const string &s);//把字符串s赋给当前的字符串 string &assign(const char *s); //把字符串s赋给当前的字符串 string &assign(const char *s, int n); //把字符串s的前n个字符赋给当前的字符串 string &assign(const string &s); //把字符串s赋给当前字符串 string &assign(int n,char c); //用n个字符c赋给当前字符串 string &assign(const string &s,int start, int n); //把字符串s中从start开始的n个字符赋给当前字符串 string的子串 string substr(int pos=0, int n=npos) const; //返回由pos开始的n个字符组成的子字符串 string 的 assing 用法: // 自己去用代码实现,熟悉其含义和用法 string strA("到此一游"); string strC; strC = strA; strC.assign("abcdefghijk"); strC.assign("baidu"); strC.assign(strA); strC.assign(5,'f'); string与wstring的区别(*****) string是对char*的管理,一个字符占一个字节大小,一个汉字占两个字节,ASCII编码。 wstring是对wchar_t*的管理,一个字符占两个字节大小,一个汉字占两个字节,Unicode编码。 wstring的使用方法跟string类似,区别主要在于函数参数char*与函数参数wchar_t* 更多关于 string 与 wstring 的知识,这里不做讨论,因为,我也不清楚这方面的知识了。
-------------------------- string 小结
string 是一个字符序列容器,可自动管理字符的内存分配。教之传统的 char* 字符数组, string 提供了十分丰富函数用于字符的添加、删除、替换、查找和比较等。由于篇幅有限,相当多的函数并未列出,读者可参考 C++STL 的帮助文档。
string 缺点:在查找方面,string没有set、map快。这是他的一个缺点。
string 优点:字符串操作方面,是他的强项。。。。
============当你们看到这里的时候,我想说,你们有福了。
我有个《葵花宝典》和你们分享: http://vdisk.weibo.com/s===================
相关文章推荐
- C++ Primer 学习笔记_31_STL实践与分析(5) --再谈string类型(上)
- C++ Primer 学习笔记_32_STL实践与分析(6) --再谈string类型(下)
- C++ STL 学习笔记 string
- C++学习笔记(六):复杂数据类型(string、容器和STL)
- C++ Primer 学习笔记_32_STL实践与分析(6) --再谈string类型(下)
- 【学习笔记】《STL使用入门教程》第一讲:STL的string类型的使用方法
- C++ Standard Stl -- SGI STL源码学习笔记(08) string
- STL学习笔记之容器--string
- C++ STL学习笔记2--String
- STL学习笔记-- string
- C++ Standard Stl -- SGI STL源码学习笔记(03) STL中的模板编译期检查与偏特化编译期检查
- Python学习笔记3-string
- iOS学习笔记(一)---NSMutableString可变数组
- OBJ-C NSString + NSRange + NSMutableString 学习笔记
- java学习笔记之String,StringBuilder和StringBuffer
- ios学习临时笔记-NSLocalizedString使用
- python学习笔记(三)——string
- Effective STL学习笔记-条款40
- STL学习笔记--各种容器的运用时机
- STL学习笔记之容器--list(一)