随笔-43  评论-2  文章-6  trackbacks-0
C++提供了两种字符串的表示:C风格的字符串和标准C++引入的string类类型。一般我们建议使用string类,但实际上在许多程序的情形中,我们有必要理解和使用老式的C风格字符串。

C风格的字符串起源于C语言,并在C++中继续得到支持(实际上,在标准C++之前,除了第三方字符串库类之外,它是唯一一种被支持的字符串)
字符串被存储在一个字符数组中,一般通过一个char*类型的指针来操纵它。标准C库为操纵C风格的字符串提供了一组函数。例如:
int strlen(const char*);//返回字符串的长度
int strcmp(const char*, const char*);//比较两个字符串是否相等
char* strcpy(char*, const char*);//把第二个字符串拷贝到第一个字符串中
(标准C库为标准的C++的一部分被包含在其中。)为使用这些函数。我们必须包含相关的C头文件,
#include <cstring>

指向C风格字符串的字符指针总是指向一个相关联的字符数组。即使当我们写一个字符串常量时,如:
const char *st = "The expense of spirit\n";
系统在内部也把字符串常量存储在一个字符串数组中。然后,st指向该数组的第一个元素。一般地我们用指针的算术运行来遍历C风格的字符串,每次指针增加1,直到到达终止空字符为止。例如:
while ( *st++){...}
char*类型的指针被解除引用,并且测试指向的字符是true还是false。true值是除了空字符外的任意字符。++是增加运算符,它使指针对指向数组中的下一个字符。

C++标准库提供了字符串类抽象的一个公共实现。
你希望字符串类有哪些操作呢?最小的基本行为集合出什么构成呢?
1.支持用字符序列或第二个字符串对象来初始化一个字符串对象。C风格的字符串不支持用另外一个字符串初始化一个字符串。
2.支持字符串之间的拷贝。C风格字符串通过使用库函数strcpy()来实现。
3.支持读写访问单个字符。对于C风格字符串,单个字符访问由下标操作符或直接解除指针引用来实现。
4.支持两个字符串的相等比较。对于C风格字符串,字符串比较通过库函数strcmp()来实现。
5.支持两个字符串的连接:把一个字符串接到另一个字符串上,或将两个字符串组合起来形成第三个字符串。对于C风格的字符串,连接由库函数strcat()来实现。把两个字符串连接起来形成第三个字符串的实现是,用strcpy()把一个字符串拷贝到一个新实例中,然后用strcat()把另一个字符串连接到新的实例上。
6.支持对字符串长度的查询。对于C风格字符串,字符串长度由库函数strlen()返回。
7.支持字符串是否为空的判断。对于C风格字符串,通过下面两部条件测试来完成。
char *str = 0;
//...
if(!str ||!*str)
return;
标准C++提供了支持这些操作的string类。

让我们来看string类型怎样支持这些操作。
要使用string类型,必须先包含相关的头文件:
#include<string>
...
posted on 2012-11-14 00:55 寻步 阅读(239) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理