您的位置:首页 > 其它

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 字符串还有以下几个比较常用的函数,如下是他们的使用原型说明。

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===================
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: