第5章数组-字符数组_第1页
第5章数组-字符数组_第2页
第5章数组-字符数组_第3页
第5章数组-字符数组_第4页
第5章数组-字符数组_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第5章章 数组数组第第5章章 利用数组利用数组5.1 为什么需要数组为什么需要数组5.2 定义和引用一维数组定义和引用一维数组5.3 定义和引用二维数组定义和引用二维数组5.4 用数组作函数参数用数组作函数参数5.5 字符数组字符数组*5.6 C+处理字符串的方法处理字符串的方法字符串类与字符字符串类与字符串变量串变量第第5章章 数组数组5.5 字符数组字符数组字符数组用来存放字符串数据,字符数组中的一个元字符数组中的一个元素存放一个字符,字符数组具有前述数组的共同属性素存放一个字符,字符数组具有前述数组的共同属性。由于字符串应用广泛,C和C+专门为它提供了许多方便的用法和函数。5.5.1

2、定义和初始化字符数组定义和初始化字符数组1. 定义字符数组定义字符数组的方法与数值数组类似。例如char c10;定义c为字符数组,包含10个字符型元素。第第5章章 数组数组2. 初始化字符数组初始化字符数组,最容易理解的方式是逐个字符赋给数组中各元素。如char c10= I, ,a,m, ,h,a,p,p,y ;把10个字符分别赋给c0c9这10个元素,如图5.7。说明:如果花括号中提供的初值个数初值个数大于大于数组长度数组长度,则按语法错误错误处理。如果初值个数初值个数小于小于数组长度数组长度,其余其余的元素自动定为空字符的元素自动定为空字符。如果提供的初值个数与初值个数与预定的数组长度

3、相同长度相同,在定义时可以省略数组长度定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。如下形式自动确定为10char c = I, ,a,m, ,h,a,p,p,y ;第第5章章 数组数组5.5.2 字符数组的赋值与引用字符数组的赋值与引用和数值数组一样,只能对字符数组的元素赋值,而不能对整个数组赋值。如char c5;c0=C; c1=h;c2=i;c3=n;c4=a; c0=c1; /对数组元素赋值,正确。而char a10,c10,b10=C, h, i, n, a ; c=C, h, i, n, a ; /错误,企图对整个数组一次赋值a=b; /错误,企图对整个数组整体赋值

4、第第5章章 数组数组实例实例:引用字符数组,输出一个字符串。#include using namespace std;void main ( ) char c10=I, ,a,m, ,a, ,b,o,y; int i; for(i=0;i10;i+) coutci; /逐个引用数组元素,每次输出一个字符 coutendl; return 0; 输出结果: I am a boy第第5章章 数组数组例例5.9 设计和输出一个钻石图形(二维字符数组的定义、初始化和引用)。#include using namespace std;void main( )char diamond 5= , ,*, ,*

5、, ,*,*, , , ,*, ,*, ,*, , ,*; int i,j; for (i=0;i5;i+) for (j=0;j5;j+) coutdiamondij; coutendl; 运行结果为: * * * * * * *第第5章章 数组数组5.5.3 字符串和字符串结束标志字符串和字符串结束标志1. 对一个字符串常量,存放时系统会自动在自动在所有字符的后面加一个后面加一个0作为结束符(P24)。例如 coutstr; /用字符数组名字符数组名输入字符串coutstr; /用字符数组名字符数组名输出字符串在运行时输入一个字符串,如China在内存中,在5个字符的后面自动加了一个结束符

6、0 。执行“coutstr;”的过程是从str所指向的数组第一个元素开始逐个输出字符,直到遇到0为止。输出结果为China第第5章章 数组数组说明:(1) 输出的字符不包括结束符0 。(2) 输出字符串时,cout流用字符数组名字符数组名-字符数组地址字符数组地址。 (3) 如果数组长度大于字符串实际长度,也只输出到0。(4) 如果一个字符数组中包含多个0,则遇第一个0时输出就结束。(5) 用cin向计算机输入一个字符串时,从键盘输入的字符串应短于已定义的字符数组的长度,否则可能可能会出现问题。(6) 上述程序段,若输入“How are you ?”,则输出“How”。把“How”后的空格看成

7、是字符串的分隔符空格看成是字符串的分隔符,只将空格前的字符“How”作为字符串处理,存入str中,其后加0。输入行带有空格的字符串,可以使用字符数组逐个输入字符也可以使用字符串处理函数、字符串变量或使用cin流中的getline函数。第第5章章 数组数组5.5.5 使用字符串处理函数使用字符串处理函数由于字符串使用广泛,C和C+提供了一些字符串函数,使得用户能很方便地对字符串进行处理。这些函数,是在string和string.h头文件中定义。使用时应该用用#include命令命令把把string.h或或string头文件包含到本文件中头文件包含到本文件中。1. 字符串连接函数字符串连接函数 s

8、trcat 函数原型为:函数原型为:strcat(char,const char);或或 char *strcat(char *strdest,const char *strscr);函数的作用:函数的作用:将第二个字符数组中的字符串连接到第一个字符数组的字符串的后面。第二个字符数组被指定为const,以保证该数组中的内容不会在函数调用期间修改。连接后的字符串放在第一个字符数组中,函数调用后得到的函数值,就是第一个字符数组的地址。第第5章章 数组数组例如char str130=Peoples Republic of ;char str2 =China;coutstrcat(str1,str2)

9、; /调用strcat函数coutstr1;输出:Peoples Republic of ChinaPeoples Republic of China连接前后的状况如图5.10所示。图5.10两参数均可为字符数组两参数均可为字符数组(字符指针字符指针)或字符串或字符串第第5章章 数组数组2. 字符串复制函数字符串复制函数strcpy函数原型:函数原型:strcpy(char,const char);作用:作用:把第2个字符数组中的字符串复制到第1个字符数组中。例如char str110;char str2 =Chinese; coutstrcpy(str1,str2)endl;coutstr1

10、 字符串字符串str2,函数值为一,函数值为一正整数正整数字符串字符串str1 bye、 yesye注意注意:字符串只能用字符串只能用strcmp函数比较,不能用关系运算函数比较,不能用关系运算符比较。即符比较。即不能用以下形式:if(str1str2) cout0) coutyes; 第第5章章 数组数组4. 字符串长度函数字符串长度函数strlen 函数原型:函数原型:strlen(const char);测试字符串长度,其函数的值为字符串中的实际长度,不包括0在内。如char str10=China;coutstrlen(str);输出结果是5。5. 字符串输入函数字符串输入函数gets

11、(函数原型在stdio.h中)函数原型:函数原型: gets(char);输入字符串到数组,直到接收到换行符(回车)为止。可用于输入带有空格的字符串,例如 char str12; gets(str);/将输入的一行字符赋给字符数组str第第5章章 数组数组5.5.6 字符数组应用举例字符数组应用举例例例5.10有3个国家名,找出最前面的国家。要用函数调用。程序如下:主函数输入数据,被调函数找出并输出最前者#include #include using namespace std;int main( )void smallest_string(char str 30,int i); /函数声明

12、int i; char country_name330;/定义二维字符数组 for(i=0;icountry_namei; /输入3个国家名 smallest_string(country_name,3); /调用smallest_string函数 return 0; 二维字符数组名调用二维数组一维下标作字符数组名第第5章章 数组数组void smallest_string(char str 30,int n) /寻找最小字符串int i; char string30;/存放最小字符串 strcpy(string,str0); /先使str0为最小字符串 for(i=1;in;i+) if(s

13、trcmp(stri,string)0) strcpy(string,stri); / 如果stristring复制到string coutendlthe smallest string is: stringendl;运行结果如下:CHINAGERMANYFRANCHthe smallest string is: CHINA第第5章章 数组数组程序中for(i=0;icountry_namei; /输入3个国家名这里,这里,country_namei是一个一维数组名是一个一维数组名。例如把str看作是一个一维字符数组,有3个元素str0 str1 str2,每个元素是一个包含20个元素的一维数

14、组。此时,输入字符串中不能含有空格,若有空格可用gets函数for(i=0;i 字符数组,利用循环判断。字符数组,利用循环判断。算法分析:单词的数目可由空格出现的次数决定。1.设变量num统计单词个数,初值为0。2.设变量word判别前字符是否空格,是空格word0,否则word1, word初值0。第第5章章 数组数组算法N-S图:第第5章章 数组数组程序如下:#include #include /gets()函数在stdio.h头文件中void main() char string81; /存放输入的一行字符,80/行 int i,num=0,word=0; char c; gets(st

15、ring); /用gets函数输入一行字符 for(i=0;(c=stringi)!=0;i+) if(c= ) word=0; else if(word=0) word=1; num+; coutThere are num words in the line;第第5章章 数组数组*5.6 C+处理字符串的方法处理字符串的方法 字符串类与字符串变量字符串类与字符串变量用字符数组存放字符串并不是最理想和最安全的方法。例如,连接或复制字符串时,长度超过数组的长度,会发生数组越界错误,就可能破坏系统的正常工作状态。C+提供了字符串类型(string类型),在使用方法上,它和char、int类型一样,

16、可以用来定义变量,这就是字符串变字符串变量量用一个名字代表一个字符串用一个名字代表一个字符串。string类型并不是C+语言本身具有的基本类型,它是在C+标准库中标准库中声明的一个字符串类字符串类,用它可以定义对象。每一个字符串变量都是string类的一个对象。第第5章章 数组数组C+给 string对象定义了许多处理字符串的运算符,这些运算符允许在一般表达式中使用string对象。C+支持的字符串运算符如下:运算符含义+=!= 赋值连接连接并赋值等于不等于小于小于或等于大于大于或等于下标输出输入第第5章章 数组数组5.6.1 字符串变量的定义和引用字符串变量的定义和引用使用使用string类

17、的功能类的功能时,要在本文件的开头将C+标准库中的string头文件包含进来头文件包含进来。即应加上#include 1. 定义字符串变量及初始化定义字符串变量及初始化字符串变量也必须先定义后使用,定义字符串变量要用类名string。如string string1; /定义string1为字符串变量string string2=“China”; /定义string2同时初始化在定义字符串变量字符串变量时不需指定长度,长度随赋值的字长度随赋值的字符串长度而改变符串长度而改变。说明:用string类定义字符串变量在Visual C+ 6.0可以使用,GCC(Turbo C3.0+)不能通过。第第5

18、章章 数组数组2. 对字符串变量的赋值对字符串变量的赋值1) 定义了字符串变量后,可以用赋值语句可以用赋值语句对它赋予一个字符串常量,如string1=Canada;也可以用一个字符串变量给另一个字符串变量赋值。如 string2=string1; /string2和string1均为字符串变量此时,字符串变量字符串变量string2长度,随字符串变量长度,随字符串变量string1的的字符串长度而改变长度而改变。2) 也可以对字符串变量中某一字符进行操作,如 string word=Then; /定义并初始化字符串变量wordword2=a; /修改后word的值为“Than”第第5章章 数

19、组数组3. 字符串变量的输入输出字符串变量的输入输出可以在输入输出语句中用字符串变量名来输入输出字符串,如cin string1; /从键盘输入一个字符串string1(输入的字符串可以包含空格)cout string2; /将字符串string2输出第第5章章 数组数组5.6.2 字符串变量的运算字符串变量的运算在字符数组存放字符串时,字符串的运算要用字符串函数,strcmp(比较)、strcpy(复制)。对字符串变量,可以直接用对字符串变量,可以直接用C+字符串运算符字符串运算符。(1) 字符串复制用赋值号string1=string2; /string1、string2为字符串变量其作用

20、与“strcpy(string1,string2);”相同。(2) 字符串连接用加号string string1=C+; /定义string1并赋初值string string2=Language; /定义string2并赋初值string1=string1 + string2; /连接后为C+ Language(3) 字符串比较直接用关系运算符string1=string2;显然,使用这些运算符比使用字符串函数直观而方便。第第5章章 数组数组5.6.3 字符串数组字符串数组也可以用string定义字符串数组。如string name5; /定义一个含5个字符串的字符串数组string nam

21、e5=Zhang,Li,Fun,Wang,Tan; /定义一个字符串数组并初始化此时name数组的状况如图5.11所示。图5.11第第5章章 数组数组由上可以看到:(1) 在字符串数组的每一个元素中存放一个字符串,而不是一个字符,这是字符串数组与字符数组的区别。(2) 在一个字符串数组中包含若干个元素,每个元素相当于一个字符串变量。(3) 并不要求每个字符串元素具有相同的长度,即使对同一个元素而言,它的长度也是可以变化的,当向某一个元素重新赋值,其长度就可能发生变化。可见用字符串数组存放字符串以及对字符串进行处理简单、方便、直观,提高了效率。第第5章章 数组数组5.6.4 字符串运算举例字符串

22、运算举例例例5.11 输入3个字符串,按由小到大的顺序输出。int main( )string string1,string2,string3,temp; coutstring1string2string3; /输入3个字符串 if(string2string3) temp=string2;string2=string3;string3=temp; /使串2串3 if(string1=string2) /如果串1串2,则串1串2串3 coutstring1 string2 string3endl; else if(string1=string3) /串1串2且串1串3,则串2串1串3 cout

23、string2 string1 string3endl; else coutstring2 string3 string1endl; /串1串2且串1串3,则串2串3串1 第第5章章 数组数组例例5.12 一个班有n个学生,把每个学生的姓名和学号输入计算机保存。通过输入某一学生的姓名查找其有关资料,如果有,则输出他的姓名和学号;如果查不到,则输出“本班无此人”。编写两个函数,函数input_data用来输入n个学生的姓名和学号,函数search用来查找要找的学生是否在本班。程序可编写如下: #include #include using namespace std;string name50,

24、num50; /定义两个字符串数组,分别存放姓名和学号int n; /n是实际的学生数,全局变量第第5章章 数组数组int main( )void input_data( ); /输入函数声明 void search(string find_name); /查找函数声明 string find_name; /find_name存放要找的学生 coutn; /输入学生数 input_data( ); /调用input_data函数,输入学生数据 coutfind_name; /输入要找的学生的姓名 search(find_name); /调用search函数,寻找该学生姓名 return 0;第第5章章 数组数组void input_data( ) /输入函数int i; for (i=0;in;i+) coutinput name and NO. of studenti+1nameinumi; /输入n个学生的姓名和学号 void search(string find_name) /查找函数int i; bool flag=false;/找到为真true,初始值为没找到false for(i=0;in;i+) if(namei=find_name) /如果找到,输出该学生姓名与学号 coutnameihas be

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论