分享

C 字符串

 老来乐64 2018-07-16

与C语言一样,在C++的基本数据类型变量中没有字符串变量。那么如何存储和处理字符串数据呢?在C语言中是使用字符型数组来存放字符串的,C++程序中也仍然可以用这种方法。不仅如此,标准C++库中还预定义了string类。今天就来介绍这两种方法。


用字符串存储和处理字符串

字符串变量是一对双引号括起来的字符序列。例如:''abcd'',''China'',都是字符串常量。它在内存中的存放形式是,按串中字符的排列次序顺序存放,每个字符占一个字节,并在末尾添加''\0''作为结尾标记。这实际上是一个隐含创建的类型为char的数组,一个字符串常量就表示这样一个数组的首地址。因此,可以把字符串常量赋给字符串指针,由于常量值是不能改的,应将字符串常量赋给指向常量的指针,例如:

const char *STRING1=''This is a string'';

这时,可以直接对STRING1进行输出,例如:

cout<>

字符变量也可以用类似的方式表示。如果创建一个char数组,每个元素存放字符串的一个字符,在末尾放置一个''\0'',便构成C++字符串。它的储存方式与字符串常量无异,但由于它是程序员创建的数组,因此可以改写其内容,因而这就是字符串变量而非常量了。这时候要注意,用于存放字符串的数组其元素个数应该不小于字符串的长度(字符串个数)加一。对字符数组进行初始化赋值时,初值的形式可以是以逗号分隔的ASCII码或字符常量,也可以是整体的字符串常量(这时末尾的''\0''是隐含的)。下面列出的语句都可以创建一个初值为“program”的字符串变量,3种写法是等价的。

char str[8]={''p'',''r'',''o'',''g'',''r'',''a'',''m'',''\0''};

char str[8]=''program'';

char str[ ]=''program'';

尽管对用字符数组表示的字符串进行初始化还比较容易、直观,但进行许多其他字符串操作时却比较麻烦。执行很多字符串操作需要借助cstring头文件中的字符串处理函数。

另外,当字符串长度很不稳定时,需要用new来动态创建字符数组,最后还要用delete释放,这些都相当繁琐。C++对这些繁琐的操作进行了封装,形成了string类,可以更加方便地操作字符串。


string类

使用数组来存放字符串,调用系统函数来处理字符串,会感觉不太方便,而且数据与处理数据的函数分离也不符合面向对象方法的要求。为此,C++标准库将面向对象的串的概念加入到C++语言中,预定义了字符串类(string类)。string类提供了对字符串进行处理所需要的操作。使用string类需要包含头文件string。string类封装了串的属性并提供了一系列允许访问这些属性的函数。

细节:严格来说,string并非一个独立的类,而是类模板basic_string的一个特化实例。不过对于string的使用者来说,它的特点与一个类无异,因此可以把它当作一个类来看待。

下面简要介绍一个string类的构造函数、几个常用的成员函数和操作。为了简明起见,函数原型是经过简化的,与头文件的形式不完全一样。

string(); //默认构造函数,建立一个长度为0的串

string(const string& rhs); //赋值构造函数

string(const char *s); //用指针s所指向的字符串常量初始化string类的对象

string(const string& rhs,unsigned int pos,unsigned int n);

//将对象rhs中的串从位置pos开始取n个字符,用来初始化string类的对象

//注:串中的第一个字符的位置为0

string (const char *s,unsigned int n);

//用指针s所指向的字符串中的前n个字符初始化string类的对象

string (unsigned int n,char c);

//将参数c中的字符重复n次,用来初始化string类的对象

提示:由于string类具有接收const char*类型的构造函数,因此字符串常量和用字符数组表示的字符串变量都可以隐含地转换为string对象。例如:可以直接使用字符串常量对string对象初始化:

string str=''Hello world!'';



string类还有一些小知识,比如:操作符和常用成员函数。这些将放在明天8点更新,记得关注哦。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多