使用字符数组存储字符串是不理想和安全的方法
c提供了新的数据类型——字符串类型(字符串类型)。 这与charint类型一样,字符串变量3354可以用于用名称表示字符串
实际上,string不是c语言本身具有的基本类型,而是在c标准库中声明的字符串类,可以使用该类定义对象的所有字符串变量都是string类的对象
一、字符串变量的定义和参照1 .字符串变量的定义
与其他类型变量一样,字符串变量必须首先定义,然后才能使用。 使用类名string定义字符串变量
字符串1; 将string1定义为字符串变量
字符串2=" China " "; 定义string2并同时初始化
要使用3:string类的功能,必须在此文件的开头包含c标准库的string头文件。 也就是说,需要添加
注意#include string //头文件名称不是string.h
2 .赋值给字符串变量
定义字符串变量后,可以使用赋值语句分配以下字符串常量
字符串1=" Canada " ";
可以为字符串变量分配字符串常量,也可以将字符串变量分配给另一个字符串变量
string2=string1; 假设string2和string1都被定义为字符串变量
如果string2和string1长度不一定相同,string2为" " China " ",string1为" Canada ",则代入后的string2也为" Canada ",在定义字符串变量时指定长度
可以按如下方式操作字符串变量中的字符
string word=Then " "; //定义并初始化字符串变量word
word[2]='a '; //修正编号2字符的修正后的word的值为" " Than " "
3 .字符串变量的输入输出
可以在输入/输出语句中使用字符串变量名称输入类似于以下内容的输出字符串
cin string1; //通过键盘在字符串变量string1中输入字符串
cout string2; 输出//字符串string2
二、字符串变量的运算如前一节所示,以字符串数组存储字符串时,字符串的运算使用strcat (连接) strcmp (比较) strcpy )这样的字符串函数,但在string类对象中使用这些函数
字符串复制用赋值编号
string1=string2;
其作用和“strcpy(string1,string2)”相同的字符串连接用加号
字符串1=" c " "; 定义string1并分配初始值
字符串2="语言" "; 定义string2并分配初始值
串1=串1串2; 连接string1和string2
如果合并后的字符串1是" " C Language " "字符串,则使用直接关系运算符
比===(等于) )大) )小)直接使用也可以! 用===不相等===以上===以下=等关系运算符进行字符串的比较
这些运算符比使用第5.5.5节中介绍的字符串函数更直观、更方便
三.字符串数组不仅可以在string中定义字符串变量,而且可以在string中定义字符串数组
string name[5];//定义包含五个字符串元素的字符串数组
string name [5]={ "张" "、"李"、" fun "、" "王"、"谭";
//定义并初始化字符串数组
此时的name序列的状况如图5.11所示
图5.11
关于字符串数组的一些说明:
字符串数组包含多个元素(目前为5个),每个元素对应于字符串变量,因此每个字符串元素不必具有相同的长度。 即使是同样的要素,长度也会发生变化。 如果重新赋值给某个元素,则长度可能会发生变化,字符串数组中的每个元素都将存储字符串而不是字符串。 这是字符串数组和字符数组的区别。 如果以字符数组存储字符串,则一个元素只能存储一个字符。 一维字符数组存储一个字符串。 每个字符串元素不包含“ ”,而只包含字符串本身的字符
您会发现在字符串数组中存储字符串和处理字符串很有用
定义字符串数组时,如何为数组分配存储体呢? 实际上,编译系统为每个字符串变量分配4个字节。 在该存储单元中,存储字符串而不是字符串本身地址,在本例中,将字符串" "张" "的地址设为name[0],将字符串" Li "的地址设为name[1],将字符串" fun "的地址设为
串的指针(字符串的地址)。一、字符串连接函数 strcat
其函数原型为
strcat(char[],const char[]);
strcat是string catenate(字符串连接)的缩写。该函数有两个字符数组的参数,函数的作用是:将第二个字符数组中的字符串连接到前面字符数组的字符串的后面。第二个字符数组被指定为const,以保证该数组中的内容不会在函数调用期间修改。连接后的字符串放在第一个字符数组中,函数调用后得到的函数值,就是第一个字符数组的地址。例如
char str1[30]=″People′s Republic of ″;
char str2[]=″China″;
cout<<strcat(str1,str2));//调用strcat函数
输出:
People′s Republic of China
连接前后的状况如图5.10所示。
图5.10
其函数原型为
strcpy(char[],const char[]);
strcpy是string copy(字符串复制)的缩写。它的作用是将第二个字符数组中的字符串复制到第一个字符数组中去,将第一个字符数组中的相应字符覆盖。例如
char str1[10],str2[]=″China″;
strcpy(str1,str2);
执行后,str2中的5个字符″China″和′ ′(共6个字符)复制到数组str1中。
关于字符串复制函数strcpy的几点说明:
三、字符串比较函数strcmp
其函数原型为
strcmp(const char[],const char[]);
strcmp是string compare(字符串比较)的缩写。作用是比较两个字符串。由于这两个字符数组只参加比较而不应改变其内容,因此两个参数都加上const声明。以下写法是合法的:
strcmp(str1,str2);
strcmp(″China″,″Korea″);
strcmp(str1,″Beijing″);
比较的结果由函数值带回:
如果字符串1=字符串2,函数值为0。如果字符串1>字符串2,函数值为一正整数。如果字符串1<字符串2,函数值为一负整数。
字符串比较的规则与其他语言中的规则相同,即对两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到′ ′为止。如全部字符相同,则认为相等;若出现不相同的字符,则以第一个不相同的字符的比较结果为准。
注意:对两个字符串比较,不能用以下形式:
if(str1>str2) cout<<″yes″;
字符数组名str1和str2代表数组地址,上面写法表示将两个数组地址进行比较,而不是对数组中的字符串进行比较。对两个字符串比较应该用
if(strcmp(str1,str2)>0) cout<<″yes″;
四、字符串长度函数strlen
函数原型为
strlen(const char[]);
strlen是string length(字符串长度)的缩写。它是测试字符串长度的函数。其函数的值为字符串中的实际长度,不包括′ ′在内。如
char str[10]=″China″;
cout<<strlen(str);
输出结果不是10,也不是6,而是5。
以上是几种常用的字符串处理函数,除此之外还有其他一些函数。