C++处理字符串的方法——字符串类与字符串变量
- 用字符数组存放字符串,并在此基础上进行字符串运算,是C语言的方法,被C++保留了下来,用这样的方法,字符串总是和字符数组联系在一起的。为了存放字符串,必须定义一个字符数组。但是字符数组是有一定大小的。在进行字符串连接或字符串复制时,如果未能准确计算字符串和字符数组的长度,就会发生将一部分字符存放在字符数组范围之外,从而可能破坏系统的正常工作状态。因此用字符数组来存放字符串并不是最理想和最安全的方法。
- C++提供了一种新的数据类型——字符串类型(string类型),在使用方法上,它和char、int类型一样,可以用来定义变量,这就是字符串变量——用一个名字代表一个字符序列。实际上,string并不是C++语言本身具有的基本类型(而char,int,float,double等是C++本身提供的基本类型),它是C++标准库中声明的一个字符串类,用这种类可以定义对象。每一个字符串变量都是string类的一个对象。
字符串变量的定义和引用
定义字符串变量
- 和其他类型变量一样,字符串变量必须先定义后使用,定义字符串变量要用类名string,如:
string string1; //定义string1为字符串变量
string string2 = "China"; //定义string2同时对其初始化
- 可以看出,这和定义char,int,float,double等类型变量的方法是类似的
- 应当注意:在使用string类的定义变量时,必须在本文件的开头将C++标准库中的string头文件包含进来,即应加上
#include<string> //注意头文件名不是string.h,这一点是与定义基本数据类型变量所不同的
对字符串变量的赋值
- 在定义了字符串变量后,可以用赋值语句对它赋予一个字符串常量,如:
string1="China"; - 注意:string1是字符串变量,不是字符数组名,用字符数组时是不能这样做的,如:(❌)
char str[10]; //定义字符数组str
str = "Canada"; //错误,str不是字符串变量而是参数组名
- 既可以用字符串常量给字符串变量赋值,也可以用一个字符串变量给另一个字符串变量赋值。如:
string2=string1; //假设string2和string1均已定义为字符串变量 - 不要求string2和string1长度相同。在定义字符串变量时不需要指定长度,它的长度随其中的字符串长度而改变。这就使我们在向字符串变量赋值时不必精确计算字符个数,不必顾虑是否会"超长"而影响系统安全,为使用者提供很大方便。
- 可以对字符串变量中某一字符进行操作,如:
string word = "Then"; //定义并初始化字符串变量word
word[2] = 'a'; //修改序号为2的字符,修改后word的值为"Than"
字符串变量的输入输出
- 可以在输入输出语句中用字符串变量名,输入输出字符串,如:
cin >> string1; //从键盘输入一个字符串给字符变量string1
cout << string2; //将字符串string2中的字符输出
字符串变量的运算
- 在用字符数组存放字符串时,字符串的运算要用字符串函数,如strcat(连接)、strcmp(比较)、strcpy(复制),而对string类对象,可以不用这些函数,而直接用简单的运算符。
字符串复制直接用赋值号
string1 = string2;
其作用与strcpy(string1, string2);相同
字符串连接用加号
string string1 = "C++"; //定义string1并赋初值
string string2 = "Language"; //定义string2并赋初值
string1 = string1 + string2; //连接string1和string2
连接后string1的内容为"C++ Language"
字符串比较直接用关系运算符
- 可以用==(等于)、>(大于)、<(小于)、!=(不等于)、>=(大于或等于)、<=(小于或等于)等关系运算符来进行字符串的比较
- 为什么可以直接用以上本来只能用于基本类型的运算符来处理字符串的运算呢?这是因为在string头文件中已经对这些运算符进行了重载,使它们能用于string类对象的运算
字符串数组
- 不仅可以用string定义字符串变量,也可以用string定义字符串数组。如:
string name[5]; //定义一个字符串数组,它包含5个字符串元素
string name[5] = { "Zhang","Li","Fun","Wang","Tan" }; //定义一个字符串数组并初始化
可以看到:
- 在一个字符串数组中包含若干个元素,每个元素相当于一个字符串变量
- 并不要求每个字符串元素具有相同的长度,即使对同一个元素而言,它的长度也是可以变化的,当向某一个元素重新赋值,其长度就可能发生变化
- 在字符串数组的每一个元素中存放一个字符串,而不是一个字符,这是字符串数组与字符数组的区别。如果用字符数组存放字符串,一个元素只能存放一个字符,要用一个一维字符数才能存放一个字符串
- 字符串数组中的每一个元素的值只包含字符串本身的字符而不包括’\0’
- 归纳起来,C++对字符串的处理有两种方法:一种是用字符数组的方法,这是C语言采取的方法,一般称为C-string方法;另一种是用string类定义字符串变量,称为string方法。
4937





