C++程序设计PPT电子课件教案-第五章 数组.ppt_第1页
C++程序设计PPT电子课件教案-第五章 数组.ppt_第2页
C++程序设计PPT电子课件教案-第五章 数组.ppt_第3页
C++程序设计PPT电子课件教案-第五章 数组.ppt_第4页
C++程序设计PPT电子课件教案-第五章 数组.ppt_第5页
已阅读5页,还剩85页未读 继续免费阅读

下载本文档

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

文档简介

第五章 数组,c+程序设计,吕韫 2011-3,掌握定义一维数组和二维数组的方法以及设定初值的方法 掌握数组和循环配合的程序设计方法 掌握数组操作的基本技巧并能解决实际问题 掌握数组的一个典型应用字符串处理,熟悉常用的字符串处理函数 了解数组的概念 了解数组元素的存放方式,教学目标,教学内容,5.1 一维数组,5.2 多维数组,5.3 字符数组,5.4 实例分析,5.5 本章小结,绪论:数组的引出,序:数组的引出,c的数据类型: 基本类(简单类)字符型/整型/实型/枚举型 构造类(组合类)数组/结构体/共用体 指针类 空类型(void) 构造类型由基本类型按一定规则组成 解释:一个构造型变量不是包含一个数据,而是一组数据; 举例说明: 数组的用处很多。简单例子:要读入某班全体50位同学某科学习成绩,然后进行简单处理(求平均成绩、最高分、最低分) 若用简单变量,需50个不同变量名,要用很多个cin命令。如 int score1,score2,score50 cinscore1score2score3; cinscore4score5score6; 而用数组,可共用一个cin命令,并利用循环结构读取。 int score50,i; for (i=0;iscorei;,序:数组的引出,数组含义:同类型数据的有序集合。 数组的特点: 1. 数组中各元素是有序的。 2. 数组中元素的个数是确定的。 3. 数组中所有元素的类型是相同的 4. 数组中各元素的地址是连续的。,返 回,一维数组的定义和使用,一维数组的定义: 一维数组的引用: 一维数组的初始化: 一维数组在内存中的存储形式: 一维数组的应用举例,返 回,5.1 一维数组,数组是从第0行第0列开始一个个赋值的,一维数组的一般形式为:,存储类型 数据类型 数组名元素个数;,int a5;,一维数组存储结构图,数组元素在内存中是顺序、连续存储的,即在内存中占据一组连续的存储单元,逻辑上相邻的元素在物理地址上也是相邻的。数组名是数组首元素的内存首地址。,5.1.1 一维数组的定义,数组元素个数必须是个常量无符号整型值,绝对不可以是0、负数、浮点数,因为它们明显违反了数组的定义。 不能使用变量定义数组长度,必须是个常量值。 c+允许用户声明一个元素很多的数组,但有一个最大容量的限制,如果数组元素类型所需要的内存空间小,则可以允许声明较多的元素。例如元素类型为char者会比以int为类型者能声明更多的个数,不过一般而言其值也会按每台计算机的内存而定。 数组元素的下标值不得超过声明时所规定的上下界,否则运行时将出现数组越界错误。c+不检查访问越界。,一维数组的定义,定义: 格式: 例 : int a 10 (即 a 0, a1, a9.) 说明: 1.类型为每个数组元素的数据类型. 2. 数组名符合标识符的命名规则. 3. 常量表达式需用方括号括起, 其值只能为正整数.元素下标需从0开始. 4.常量表达式中可以包括常量和符号常量,不能包含变量。,错误: int n=5; int an;,正确: #define n 5 int an;,正确: int a10,b54; char name8,ch23; static float x8*2+1,table234; #define num 40; int anum,bnum+2;,返 回,n是一个字符变量,此处n定义为字符常量,程序中对一维数组元素的访问,数组名下标表达式,5.1.2 对一维数组元素的引用定义,一维数组的引用,原则:先定义后引用 引用形式: 数组名下标 例: a 3 = 3 a0 = a5+a7-a2*3 注释: 1.只能逐个引用数组元素,不能一次引用整个数组。 2.引用数组元素要注意下标不要出界(编译程序不检查是否“出界”)。 3.每个数组元素均可按一个简单变量的方式进行处理(如参加运算、赋值等)。 4.数组常用循环形式进行引用或赋值。,赋值方法 法1:逐个元素赋值 b0=a0; b1=a1; b2=a2; b3=a3; 法2:通过循环赋值 int i; for (i=0;i4;i+) bi=ai;,/*该程序最终只开辟一个数组空间*/ main() int a4=1,2,3,4,b4; b=a; ,原因: 数组名表示数组的首地址,其值不可改变!,错误写法: int b3; b3=1,2,3; b=1,2,3;,演示【例5.1】数组元素的引用。,#include void main() int i,a10; for(i=0;i=0;i-) coutai“ “; coutendl; ,数组引用事例,运行结果如下: 9 8 7 6 5 4 3 2 1 0 程序使a0到a9的值为09,然后按逆序输出。,返 回,一维数组的初始化,初始化:在定义数组时对数组元素赋以初值。 方法一: 给数组中的所有元素赋以初值. 例: int a10 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10; 方法二:给数组的部分元素赋以初值。 例: 1. int a10 = 1, 2, 3, 4, 5 2. int a10 = int a10 = 0 int a10 = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;,返 回,方法三:在对全部数组元素赋初值时,可以不指定数组长度。 例: int a5=1,2,3,4,5; 可以写成 int a=1,2,3,4,5,5.1.3 一维数组的初始化,表示只给前面5个元素赋初值,后5个元素值为0。,花括号中有几个数,系统会据此自定义a数组的长度为5,一维数组在内存中的存储形式,分配一连串的存储单元,依次存放各元素。 例: int a5 1010 1012 1014 1016 1018 1020,a0 a1 a2 a3 a4,返 回,一维数组的应用举例,例1:对10个学生的数学考试进行统计,求出平均分,最高分,最低分 例2:将数组内容按颠倒次序重新存放。 例3:用数组处理 fibonacci数列。 课堂练习: 常用排序算法: 起泡法: 选择法: 思考:起泡排序与选择排序哪个效率高?,返 回,例 一,# define n 10 #include void main() float an,sum=0,ave, max,min; int i; coutai; sum+=ai; max=a0; min=a0;,for(i=0;imax) max=ai; if(aimin) min=ai; ave=sum/n; cout“ave=“ave“,max=“;coutmax“,min=“minendl; ,对10个学生的数学考试进行统计,求出平均分,最高分,最低分,返 回,例 二,#define n 7 #include void main() int an,i,temp; coutai; for(i=0;in;i+) coutai; coutendl;,for(i=0;in/2;i+) temp=ai; ai=an-i-1; an-i-1=temp; for(i=0;in;i+) coutai; coutendl; ,将数组内容按颠倒次序重新存放。,返 回,例 三,例7.2用数组来处理求fibonacci数列问题。 #include void main() int i; int f20=1,1; for(i=2;i20;i+) fi=fi-2+fi-1; for(i=0;i20;i+) if(i%5=0) coutendl; coutfi“ “; ,if语句用来控制换行,每行输出5个数据。,返 回,运行结果如下: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765,演示【例4.2】数组间的赋值。,#include void main() int a=1,2,3,4,5,b5; for(int i=0;i5;i+) bi=ai; cout“vector at“; for(i=0;i5;i+) coutait; coutendl; cout“vector bt“; for(i=0;i5;i+) coutbit; coutendl; ,课堂练习,#include #define size 8 void main() int datasize; coutdatai; cout=0;i-) coutdatai ; coutendl; ,演示【例4.3】,课堂练习,输入一行数,倒序输出,#include void main() int i,m9; for(i=0;i=0;i-) coutmi“ “; coutendl; ,演示【例4.4】,课堂练习,输出:64 49 36 25 16 9 4 1 0,#include void main() int m10,i,sum=0; double avg; for(i=0;imi; sum+=mi; for(i=0;i10;i+) coutmi“ “; coutendl; avg=sum/10; cout“avg=“avgendl; ,演示【例4.5】:计算10个数的和及平均值,课堂练习,返 回,起泡法排序,算法: ,n-s图及程序,ns 图及程序(起泡法),ns 图:,程序: for (j = 1; j ai + 1) t = ai; ai = ai+1; ai+1 = t ;,共进行n-1轮,第j论比较n-j次,返 回,选择法排序,算法:,7 5 3 6 2 第一轮,2 5 3 6 7 第二轮,2 3 5 6 7 第三轮,2 3 5 6 7 第四轮,2 3 5 6 7 第五轮,n-s图及程序:,ns 图及程序(选择法),n-s图:,程序: for ( j = 1 ; j = n1; j + +) p = j ; for ( i = j + 1 ; i = n ; i + + ) if (ai a p) p = i ; t = a p ; a p = a j ; a j = t ; ,共进行n-1轮,第j 轮比较,返 回,二维数组的定义和使用,二维数组的定义及引用: 二维数组的存放形式及理解: 二维数组的初始化: 二维数组程序举例:,返 回,5.2 二维数组,数组是从第0行第0列开始一个个赋值的,切记,5.2.1 二维数组的定义,二维数组的一般形式为:,存储类型 数据类型 数组名元素个数元素个数;,int a23;,二维数组存储结构图,二维数组的含义: 用两个下标来确定各元素在数组中的顺序。可用排列成ij列的元素组来表示。,二维数组的定义及引用,定义: 格式:数据类型数组名下标1下标2 例: int m34,思考:若是三维数组会是什么样?,二维数组的引用: 引用形式: 数组名下标1下标2 例: a32 第四行第三列数组元素 int a34 a34 = 3,返 回,二维数组的存放形式及理解,二维数组在内存中的存放形式: 按行顺序依次存放各数组元素。,由三个一维数组组成,a 表示 &a0 b 表示 &b00,对二维数组的理解: 我们可以把二维数组看作是一种特殊的一维数组:,数组名表示每个数组的首地址,返 回,二维数组的初始化,给数组的所有元素赋初值: 方法一:分行顺序赋值。 例:int a34 = 1,2,3,4 , 5,6,7,8 , 9,10,11,12 方法二:整体赋值. 例:int a34 = 1,2,3,4,12 给数组中的部分元素赋初值: 例: int a34 = 1, 5, 9 int a34 = 1, 0, 6 int a34 = 1, , 9 可省略下标: 例: int a 4 = 0, 0, 3 , , 0, 10 int a 4 = 1, 2, 3, 4, 5, 6, , 12 示例:,返 回,无论省略哪一部分一定要让系统知道二维数组的行列数,注意附值个数不能超过数组宽度,4.2.2 二维数组的初始化,1. 以每行为一组 int a23=1,2,3,4,5,6; 2. 所有数据写在一个花括号内 int a23=1,2,3,4,5,6; 3. 部分数组元素赋初值 int a23=1,2,4,6; 或int a23=1,2,4,6 4. 数组长度的省略 int a3=1,2,3,4,5,6;,二维数组的初始化示例,【例一】以下程序的运行结果是什么? #include void main() int a3=1,2,3,4,5,6,0; couta11a21a31; ,1 2 3 4 5 0 6 0 0 0 0 0,结果:5, 0, 0,返 回,【例二】程序运行后的输出结果是_。 #include void main() int aa44=1,2,3,4,5,6,7,8,3,9,10,2,4,2,9,6; int i,s=0; for(i=0;i4;i+) s+=aai1; couts; ,1 2 3 4 5 6 7 8 3 9 10 2 4 2 9 6,结果:19,二维数组填程练习:,1 0 0 0 0 2 1 0 0 0 3 2 1 0 0 4 3 2 1 0 5 4 3 2 1,#include void main() int a55,i,j; clrscr(); for (i=0;i5;i+) for (j=0;j5;j+) if ( 【1】 ) aij=0; else aij=【2】; coutaij; cout“n“; ,a55分析: a00 a01 a02 a03 a04 a10 a11 a12 a13 a14 a20 a21 a22 a23 a24 a30 a31 a32 a33 a34 a40 a41 a42 a43 a44,ij,i+1-j,【分析】这类题的元素值排列很有规律,所以一般要从分析行数 i、列数 j与元素值的关系着手。分析下图可知,当 i=j时,元素值随行数 i 增加而增加,随列数 j 增加而减小,这样就很容易得出其元素值与 i,j 的关系是 i+1-j。,二维数组程序举例,例1:通过键盘给一个3行4列的二维数组输入整型数值,并按表格形式转出。 例2:将一个二维数组行和列元素互换存到另一个二维数组中。 例3:有一个3*4的矩阵,要求编程求出其中最大的那个元素的值,以及其行号列号。 例4:某小组由5个学生,考了3门课程他们的学号及成绩如表所示,编程求每个学生的平均成绩,并按表格形式输出。,返 回,例 一,#include void main() int a34,i,j; coutaij; for(i=0;i3;i+) for(j=0;j4;j+) coutaij; cout endl; ,通过键盘给一个3行4列的二维数组输入整型数值,并按表格形式转出。,返 回,把二维数组看成几个一维数组,每行一个一维数组输出 输出时在第二重循环外回车换行,例 二,将一个二维数组行和列元素互换存到另一个二维数组中。,#include void main() int a23=1,2,3,4,5,6; int b32,i,j; cout“array a:“endl; for (i=0;i=1;i+) for (j=0;j=2;j+) coutaij“ “; bji=aij; coutendl; cout“array b:“endl; for (i=0;i=2;i+) for(j=0;j=1;j+) coutbij“ “; coutendl; ,返 回,定义两个出数组,使其元素个数形同,然后把第一个数组中的元素赋值给另一个数组行列相的位置,例 三,#include void main() int i,j,row=0,colum=0,max; int a34=1,2,3,4,9,8,7,6,-10,10,-5,2; max=a00; for (i=0;imax) max=aij; row=i; colum=j; cout“max=“max“,row=“row; cout“,colum=“columendl; ,有一个3*4的矩阵,要求编程求出其中最大的那个元素的值,以及其行号列号。,输出结果为: max=10,row=2,colum=1,返 回,例 四,#include using namespace std; int main() int num5,grate53,i,j; double ave3=0,0,0,sum13=0,0,0, sum25=0,0,0,0,0; coutnumi; for(j=0;jgrateij; for(i=0;i5;i+) for(j=0;j3;j+) sum1i+=grateij;,for(j=0;j3;j+) for(i=0;i5;i+) sum2j+=grateij; avej=sum2j/5; cout“学号“ “数学“ “语文“ “英语“ “总分“endl; for(i=0;i5;i+) coutnumi; for(j=0;j3;j+) cout“ “grateij; cout“ “sum1iendl; cout“平均分“; for(j=0;j3;j+) cout“ “avej; coutendl; return 0; ,#include void main() int sum=0,a33=12,13,14,15,16,17,18,19,20; for(int i=0;i3;i+) for(int j=0;j3;j+) coutaij“ “; coutendl; sum=a12+a21; cout“a12+a21=“sumendl; ,演示【例4.7】,本题考察给元素赋值是从第0行第0列开始赋值的,#include void main() int old23,new132,i,j; coutoldij; coutendl; for(i=0;i3;i+) for(j=0;j2;j+) new1ij=oldji; cout“置换后的数组为:“endl; for(i=0;i3;i+) for(j=0;j2;j+) coutnew1ij“ “; coutendl; ,演示【例4.8】,本题类似于矩阵的转置,#include void main() float a33,sum=0; int i,j; coutaij; coutendl; for(i=0;i3;i+) sum=sum+aii; cout“对角线元素之和为:“sumendl; ,演示【例4.9】,#include #include void main() int tab99,i,j; for(i=0;i9;i+) for(j=0;j9;j+) tabij=(i+1)*(j+1); coutsetw(4)i+1; coutendl“*“; coutendl; for(i=0;i9;i+) for(j=0;j9;j+) coutsetw(4)tabij; coutendl; ,演示【例4.10】,结果,第三节 字符数组,一、字符数组的定义与引用: 二、字符数组和字符串 三、字符数组的初始化: 四、字符数组的输入与输出: 五、字符串处理函数: 六、字符数组的应用举例:,返 回,4.3 字符数组,4.3.1 字符数组的定义,字符数组的定义同前,其数据类型为char,一维字符数组的语法为:,char 数组名元素个数;,如:char s12;,用来存放字符数据的数组是字符数组,字符数组中的一个元素存放一个字符。,字符数组的定义与引用,字符数组的定义: 格式:char 数组名下标 例: char a5 ; a0 = c ; a1 = h ; a2 = i ; a3 = n ; a4 = a ;,a0 a1 a2 a3 a4,字符数组的引用: 同一维,二维数组的引用,返 回,含义:用来存放字符数据的数组是字符数组,字符数组中的一个元素存放一个字符,4.3.2 字符数组的初始化,逐个字符赋给数组中的元素,#include void main() char a13=h,e,l,l,o,w,o,r,l,d,!; coutaendl; couta10endl; ,演示【例4.11】,字符数组的初始化,方式一:逐个字符赋值。 例: char a5 = c, h, i, n, a char b23= a, b, c, d, e,f; char dia = , , *, , *, , *, *, , , , *, , *, , * , , *; 【注意】如果花括号中提供的初值个数(即字符个数)大于数组长度,则按语法错误处理;如果初值个数小于数组长度,则多余的数组元素自动为空字符(0);如果提供初值个数与预定数组长度相同,在定义是可以省略数组长度,返 回,注意:给每个元素赋值时加上单引号,用一个字符串作为初值时要给这一串字符加上双引号,#include void main() char a13=“hello,world!“; coutaendl; couta10endl; ,对整个字符数组赋初值,方式二:字符串方式 例:char a5=“abcd”; char c =”abcd”; char a25=a,b,c,0,x,y,0; char a25=“abc”,”xy”; 【注意】二维字符数组可以认为由若干个一维字符数组(字符串)组成。,演示【例4.12】,字符数组的输入与输出,方法一: 逐个元素输入/出 例: for ( i=0; istr i ; for ( i=0; ia; /*数组名前不可加,返 回,#include #include void main() char p=“abcde0fghjik0“; coutstrlen(p)endl; 输出结果为:5,说明: 输入/出时,用数组名。 输出时只输出到第一个0。 输入多个字符串时须用空格分隔。 例: cin str1str2str3; cinstr;,事例:,此法可自动在所输入的字符串末尾加上0。但输入的字符串中不能有空格。(c语言规定cin用%s时,以空格或回车符作为字符串的间隔符。 所以,上例中,如果从键盘输入“computer”然后回车,则数组a存放的是”computer0”。如果输入“turbo c“,数组a中实际只存放”turbo0”)。,注意: 1、输出的字符不包括结束符0。 2、输出字符串时,cout流中用字符数组名,而不是数组元素名。 3、如果数组长度大于字符串实际长度,也只输出到遇0结束。 4、如果一个字符数组中包含一个以上0,则遇到第一个0时输出就结束。 5、用cin 从键盘输入一串字符时,从键盘输入的字符串应短于已定义的字符数组的长度,否则会出现问题 。,字符数组的输入与输出事例:,【注意】在二维数组中,双下标引用表示某行某列的某个元素单下标引用表示某行的字符串,【例三】分析以下程序的运行结果: #include #include void main() char word310; int i; for (i=0;iwordi; coutwordi-2endl; ,运行时,输入: 12345 abcdef abcdefg,wordi表示第i+1行word元素首地址(二维数组用单下标表示某行的字符串),结果:abcdef,数组内实际存放的是: abcdef0000 abcdef0000 0000000000 最终i=3,wordi-2 代表第一行数组内元素,4.3.3 字符数组的引用,#include void main() char a10=i, ,a,m, ,h,a,p,p,y; int i; for(i=0;i10;i+) coutai; coutendl; ,演示【例4.13】,#include void main() char sjx5= , ,*, ,*, ,*,*, ,*, ,*; int i,j; for(i=0;i3;i+) for(j=0;j5;j+) coutsjxij; coutendl; ,演示【例4.14】,4.3.4 字符串,c+语言中有一种特殊的数组,它具有字符数组的形式,但却不仅是字符的集合,其内容往往表示的是有意义的句子。这种字符型数组就是字符串。 1. 字符串的存储形式 字符串与一维字符数组最重要的区别在于:一个字符串中至少得有一个值为0的元素,在c+中称其为null字符,通常用0来表示,该元素标志着字符串的结束。而在一个字符型数组中,一般无此元素。 一个长度为n的字符串,其数组长度至少必须为n+1。,2. 利用字符串初始化字符数组 一个字符串能够在定义字符数组时作为初始化数据存入到数组中,不能通过赋值表达式直接赋值。 3. 利用二维数组存储多个字符串 利用一维字符数组能够保存一个字符串,而利用二维数组能够同时保存若干个字符串。 一定要保证输入的字符串的长度小于字符数组的长度,这样才能把输入的字符串有效地存储起来,否则将引发越界,可能导致程序运行出错。,#include void main() char sarr321=“c+ language“,“c language“,“c+ is better then c“; for(int i=0;i3;i+) coutsarriendl; ,演示【例4.15】,4. 字符串间的赋值 字符串从本质上讲是一个数组,所以字符串之间的赋值操作与数组一样,也只能逐个元素地进行。,#include void main() char str1 =“c+ language“,str220; int i=0; while(str1i) str2i=str1i; i+; str2i=0; cout“string1:“str1endl; cout“string2:“str2endl; ,演示【例4.16】,字符数组和字符串:,引出:为测定字符串的实际长度。 字符串的结束标志:,返 回,区别: 字符数组各个元素分别存放一个字符的数组。 字 符 串(字符串常量)以“0”结尾。 实际使用中,可以将字符串看成是特殊的字符数组(以“0”为最后一个元素值)。如字符串”xy12”可以看成: char a5=x,y,1,2,0;,注意: 1、为了测定字符串实际长度,c+规定了一个字符串结束标志:0,遇到字符0就表示字符串到此结束,由他前面的字符组成字符串。 2、对于一个字符串常量,系统会自动在所有字符的后面加一个0作为结束符。 3、程序中往往依靠检测0的位置来确定字符串是否结束,而不是根据数组的长度来决定字符串长度。,字符串处理函数,序: 该函数均包含在头文件“string.h” 需用文件包含语句: # include 字符串输出、输入函数: 字符串连接函数: 字符串复制函数: 字符串比较函数: 字符串长度测试函数: 大、小写字母转换函数:,返 回,字符串输入、输出函数,字符串输出函数: 格式:puts (字符数组) 功能:将一个字符串输出到终端。 说明:输出的字符串可以包含转义字符。 例: 结果: china beijing,字符串输入函数: 格式:gets (字符数组) 功能:从终端输入一个字符串到字符数组中。 例: gets (str),事例:,字符串输入、输出函数示例,main() char a10; gets(a); couta+2; 运行程序时,从键盘输入:abc defg,结果:c defg,统计字符串中小写字母的个数。 #include “stdio.h“ main() char str20; int i,n=0; gets(_ ); for(i=0;stri!= 0;i+) if(_) n+; cout(“%dn“,n); ,str,stri=a&stri=z,返 回,4.3.5 字符串处理函数,1. 字符串连接 功能:实现将二个字符组中的字符串连接起来,即把string2连接到string1的后面,并将结果存到string1中。,strcat(string 1, string 2),字符串连接函数:,字符串连接函数: 格式:strcat (串1,串2) 功能:将串2接到串1后并存于串1中。 说明:串1中必须有足够大的空间。,【例一】 #include #include void main() char str130=“peoples republic of “; char str2=“china“; cout strcat (str1, str2)endl; ,#include #include void main() char a80=“ab“; char b80=“lmnp“; int i=0; strcat(a,b); while (ai+!=0) bi=ai; coutbendl; ,结果:lblmnp,#include #include void main() char a=“abcde“; char b=“12345“; coutstrcat(b,a)endl; ,数组b长度定义不够,将数组b的长度定义11,则出错消失?,结果:peoples republic of china,【注意】 bi=ai是从i=1开始 ,先自增后使用,为什么程序执行完后出错?,连接后a数组为:ablmnp,开始赋值,b1=a1, b2=a2 , b3=a3 b4=a4, b5=a5 m=b;n=l;p=m;0=n;0=p,2. 字符串复制 功能:将string2中的字符复制到string1中。复制的时候,连同string2后面的一起复制,且要求必须有存储字符数组string2中所有字符的空间,string2可以是一个字符数组名,也可以是一个字符串常量。,strcpy(string 1, string 2),字符串复制函数:,字符串复制函数: 格式:strcpy (串1,串2); 功能:将串2复制到串1数组中,将第一个字符数组中相应的字符覆盖 例: strcpy ( str1, “china”); strcpy (str2, str1); 说明:串1宽度须能存放串2。 复制时连同0一同复制。 不能用赋值语句对字符串进行赋值。 在调用strcpy函数时,第一个参数必须是数组名,第二个参数可以使数组名也可以是一个字符串常量,#include void main( ) char s10,sp =”hello”; strcpy(s,sp); s0=h; s6=!; puts(s); ,结果: hello,【讨论】 结果为什么不是:hello! 如果让s5=!,结果又会如何?,因为s5=0,表示字符串已经结束,如果s5=!,结果会因没有结束标志而出错.,main( ) char a =“abcde“; char b10; b=“abcde“; b=a; ,2、复制部分字符串函数:,函数格式: strcpy(串1,串2,字符个数) 含义: 将串2中指定的前面的字符个数复制到串1中。,#include “string.h” void main( ) char s =”im studentsteacher!”, a20; strcpy(a,s,11); coutaendl; ,结果:im student,3、只能通过调用strcpy函数来实现将一个字符串赋值给另一个字符数组,而不能用赋值语句将一个字符串常量或字符数组直接赋值给另一个字符数组,#include #include void main( ) char a10=“beijing“; char b20=“shanghai“; char c10=“ and “; strcat(a,c); strcat(a,b); couta; coutendl; strcat(b,c); strcat(b,a); coutb; coutendl; ,演示【例4.17】,#include #include void main() char a10,b=“hello1!“; strcpy(a,b); coutaendl; strcpy(a,“hello2!“); coutaendl; 结果:hello1! hello2!,演示【例4.18】,3. 字符串比较 功能:比较string 1和string 2。比较的规则为:两个字符串自左向右逐个比较(按ascii码值的大小比较),直到出现不同的字符或遇到“0”为止,如果全部字符相同,则认为相等;若出现不同字符,则以第一个不相同的的字符的比较结果为准,比较的结果由函数值带回。 (1) 如果字符串1=字符串2,函数值为0; (2) 如果字符串1字符串2,函数值为1; (3) 如果字符串1字符串2,函数值为-1。,strcmp(string 1, string 2),3、字符串比较函数:,格式:strcmp (串1,串2) 功能:将两个串自左至右逐个字符进行比较。 返回值: 串1 = 串2 0 串1 串2 正整数 串1 串2 负整数,练习: “a” “b” “a” “a” “computer” “compare” “36+54” “! $&#” “dog” “cat”,【注意】两个字符串进行比较只能用这种方法 如:if (str1 = = str2 ) cout ( “yes!” ); 只能写成: if ( strcmp (str1, str2 ) = = 0 ) cout “yes!” ;,#include #include void main() int s1,s2,s3; s1=strcmp(“china“,“russia“); s2=strcmp(“china“,“china“); s3=strcmp(“chinaf“,“chinae“); cout“s1=“s1endl; cout“s2=“s2endl; cout“s3=“s3endl; ,演示【例4.19】,4. 求字符串长度 功能:测试字符串的长度,函数值为字符串实际的长度,不包括0在内。,strlen(字符串),4、字符串长度测试函数,格式: strlen (/) 功能: 测试字串的实际长度,不包含0。 例: strlen ( “ c program” ),以下程序段的运行结果是什么? char a =“ abcde0fghjik0 ”; coutsizeof(a)strlen(a);,9,以下程序段的运行结果是什么? char a =”tr0willn”; coutsizeof(a)strlen(a);,结果:13,5,结果:10,3,5、大、小写字母转换函数,大写字母转换成小写字母函数: 格式: strlwr (字符串) 功能: 将数组中所有大写字母转换成小写字母。 例: str = “china”; strlwr (str);,小写字母转换成大写字母函数: 格式: strupr (字符串) 功能: 将数组中所有小写字母军转换成大写字母。,cout字符串;,6. 字符串输出 功能:显示输出字符串。,5. 求子串位置 功能:在字符串string1中寻找与子串string2相同的子串,如找到返回该字符串的从子串起始处开始的后半部分,否则返回一空字符串。,strstr(string 1, string 2),7. 字符串输入 功能:输入一个无空白字符的字符串。,cin字符串数组名;,功能:从键盘输入一个以enter键标志结束的字符串。,cin.getline(字符串数组名, 字符串数组长度);,字符数组的应用举例,例1:从键盘输入两个字符串,将它们连接成一个字符串。 例2:输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。 例3:有3个字符串,要求找出其中最大者。,例 一,方法一: #include main() char str140,str220; cout(“input two strings:n); gets(str1); gets(str2); strcat(str1,str2); puts(str1); ,方法二: #include main() char str140,str220; int i,j; cout(“input 2 string:n”); gets(str1); gets(st

温馨提示

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

评论

0/150

提交评论