深入解析C++中的字符数组和处理字符串的方法
C++字符数组 定义字符数组的方法与前面介绍的类似。例如: char c[10]; c[0]=′I′;c[1]=′ ′;c[2]=′a′;c[3]=′m′;c[4]=′ ′;c[5]=′h′;c[6]=′a′;c[7]=′p′;c[8]=′p′;c[9]=′y′; 上面定义了c为字符数组,包含10个元素。在赋值以后数组的状态如图所示。 对字符数组进行初始化,最容易理解的方式是逐个字符赋给数组中各元素。如 char c[10]={'I',' ','a','m','h','p','y'};
如果花括号中提供的初值个数大于数组长度,则按语法错误处理。如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符。如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。如: char c[]={'I','y'};
复制代码 代码如下: char diamond[5][5]={{' ','*'},{' ','*',{'*','*'}}; 字符数组的赋值与引用 只能对字符数组的元素赋值,而不能用赋值语句对整个数组赋值。如: char c[5]; c={'C','i','n','a'}; //错误,不能对整个数组一次赋值 c[0]='C'; c[1]='h';c[2]='i';c[3]='n';c[4]='a'; //对数组元素赋值,正确 如果已定义了a和b是具有相同类型和长度的数组,且b数组已被初始化,请分析: a=b; //错误,不能对整个数组整体赋值 a[0]=b[0]; //正确,引用数组元素 【例】设计和输出一个钻石图形。 #include <iostream> using namespace std; void main( ) { char diamond[][5]={{' ','*'}}; int i,j; for (i=0;i<5;i++) { for (j=0;j<5;j++) cout<<diamond[i][j]; //逐个引用数组元素,每次输出一个字符 cout<<endl; } } C++处理字符串的方法―字符串类与字符串变量 C++提供了一种新的数据类型――字符串类型(string类型),在使用方法上,它和char、int类型一样,可以用来定义变量,这就是字符串变量――用一个名字代表一个字符序列。 实际上,string并不是C++语言本身具有的基本类型,它是在C++标准库中声明的一个字符串类,用这种类可以定义对象。每一个字符串变量都是string类的一个对象。 1) 定义字符串变量 string string1; //定义string1为字符串变量 string string2=″China″; //定义string2同时对其初始化 应当注意:要使用string类的功能时,必须在本文件的开头将C++标准库中的string头文件包含进来,即应加上 #include <string> //注意头文件名不是string.h 2) 对字符串变量的赋值 string1=″Canada″;
string2=string1; //假设string2和string1均已定义为字符串变量
可以对字符串变量中某一字符进行操作,如: string word=″Then″; //定义并初始化字符串变量word word[2]=′a′; //修改序号为2的字符,修改后word的值为″Than″ 3) 字符串变量的输入输出 cin>> string1; //从键盘输入一个字符串给字符串变量string1 cout<< string2; //将字符串string2输出
在上一节中可以看到: 在以字符数组存放字符串时,字符串的运算要用字符串函数,如strcat(连接)、strcmp(比较)、strcpy(复制),而对string类对象,可以不用这些函数,而直接用简单的运算符。 1) 字符串复制用赋值号 string1=string2; 其作用与“strcpy(string1,string2);”相同。 2) 字符串连接用加号 string string1=″C++″; //定义string1并赋初值 string string2=″Language″;//定义string2并赋初值 string1=string1 + string2;//连接string1和string2
3) 字符串比较直接用关系运算符 不仅可以用string定义字符串变量,也可以用string定义字符串数组。如: string name[5]; //定义一个字符串数组,它包含5个字符串元素 string name[5]={″Zhang″,″Li″,″Fun″,″Wang″,″Tan″}; //定义一个字符串数组并初始化 此时name数组的状况如图所示。 关于字符串数组的几点说明: 在一个字符串数组中包含若干个(现为5个)元素,每个元素相当于一个字符串变量。 并不要求每个字符串元素具有相同的长度,即使对同一个元素而言,它的长度也是可以变化的,当向某一个元素重新赋值,其长度就可能发生变化。 在字符串数组的每一个元素中存放一个字符串,而不是一个字符,这是字符串数组与字符数组的区别。如果用字符数组存放字符串,一个元素只能存放一个字符,用一个一维字符数组存放一个字符串。 每一个字符串元素中只包含字符串本身的字符而不包括′ ′。 可见用字符串数组存放字符串以及对字符串进行处理是很方便的。 在定义字符串数组时怎样给数组分配存储空间呢?实际上,编译系统为每一个字符串变量分配4个字节,在这个存储单元中,并不是直接存放字符串本身,而是存放字符串的地址。在本例中,就是把字符串″Zhang″的地址存放在name[0],把字符串″Li″ 的地址存放在name[1],把字符串″Fun″的地址存放在name[2]……上只是一个示意图。在字符串变量中存放的是字符串的指针(字符串的地址)。
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |