C语言程序设计课件 第5章 数组_第1页
C语言程序设计课件 第5章 数组_第2页
C语言程序设计课件 第5章 数组_第3页
C语言程序设计课件 第5章 数组_第4页
C语言程序设计课件 第5章 数组_第5页
已阅读5页,还剩46页未读, 继续免费阅读

下载本文档

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

文档简介

数组目

录5.1

一维数组5.1.1

一维数组的定义、存储和初始化5.1.2

一维数组元素的引用5.2

二维数组和多维数组5.2.1二维数组的定义、存储和初始化5.2.2二维数组元素的引用5.2.3多维数组5.3字符串5.3.1字符串的定义和初始化5.3.2字符串的输入和输出5.3.3常用字符串函数数组数组指把具有相同类型的若干数值按有序的形式组织起来,构造而成的一种复杂数据类型。组成数组的各个数值称为数组元素。用于区分各个数组元素的数字编号称为下标,所以数组有时也称为下标变量。5.1.1一维数组的定义一维数组的定义形式如下:类型说明符数组名[常量表达式]数组定义时,必须指明数组中元素的个数,即数组长度。数组长度必须是常量表达式,不能是变量。#defineN12 intMath[12] charSex[12] floatAverage[N]

特别注意:假设数组长度为N,则数组元素的下标从0~N-1。C语言对数组不做越界检查,也不报错,但读取的数值是无意义的。intn=12;floatAverage[n];5.1.1一维数组的存储数组元素在内存中占用一段连续的存储空间。数组元素Math[0]的地址为数组的首地址。数组的首地址还可直接用数组名表示,即Math=0X0060FED0。数组名是一个代表数组首地址的地址常量,程序运行过程中不能改变它的值。5.1.1一维数组的初始化数组的初始化指在数组定义的同时给数组元素赋值。数组元素未初始化时,其值是不确定的。(1)给所有元素赋值:intMath[12]={76,84,92,70,65,90,56,77,61,85,91,80};当给数组中所有元素赋值时,可以不指定数组的长度。数组长度默认为大括号里元素的个数。intMath[]={76,84,92,70,65,90,56,77,61,85,91,80};(2)给部分元素赋值:intMath[12]={76,84,92};charSex[12]={‘M’,‘F’};给部分元素赋值时,数组长度必须明确指明,不能省略。(3)给所有元素都赋值为0、’\0’或NULL,可以使用下面方式,简单又快捷:intMath[12]={0};charSex={‘\0’};5.1.1一维数组的初始化特别注意:(1)当数组是静态类型或全局类型时(关于静态变量和全局变量将在第6章函数部分介绍),在未初始化的情况下,其所有元素的值默认为0或NULL。如:staticintMath[12];//12个元素的值都为0(2)数组元素的值除了可以初始化时赋值,也可以像普通变量一样通过键盘或者赋值语句赋值。(3)再次强调,给部分元素赋值时,数组长度必须明确指明,不能省略。5.1.2一维数组元素的引用数组可以作为一个整体被程序使用(具体参见第6章函数和第7章指针),也可以单独使用数组中的元素。当单独使用数组元素时,和使用同种类型的普通变量一样。

由于数组包含多个数组元素,所以处理数组一般要配合循环结构。5.1.2一维数组元素的引用【例5-1】统计表5.1中男同学和女同学数学成绩的平均分,程序输出结果如图所示。#include<stdio.h>#include<stdlib.h>intmain(){intMath[12]={76,84,92,70,65,90,56,77,61,85,91,80}; charSex[12]={'M','F','F','F','M','M','M','F','M','M','M','M'}; inti,SumM=0,SumF=0,CountM=0,CountF=0;floatAverageM,AverageF;for(i=0;i<=11;i++){if(Sex[i]=='M') {SumM=SumM+Math[i];

CountM++;}else{SumF=SumF+Math[i];

CountF++;}}AverageM=(float)SumM/CountM;AverageF=(float)SumF/CountF;printf("男同学数学平均分:%.2f\n女同学数学平均分:%.2f",AverageM,AverageF);return0;}5.1.2一维数组元素的引用【例5-2】计算表5.1中每位同学的总分,数学成绩和英语成绩由键盘输入。#include<stdio.h>#include<stdlib.h>intmain(){inti,Math[12],English[12],Sum[12];printf("请分别输入每位同学的数学成绩和英语成绩,形如7686:\n");for(i=0;i<=11;i++){

scanf("%d%d",&Math[i],&English[i]); Sum[i]=Math[i]+English[i];

}for(i=0;i<=11;i++)printf("第%d位同学的总分:%d\n",i+1,Sum[i]);return0;}5.1.2一维数组元素的引用-冒泡排序【例5-3】使用冒泡排序法将总分按照由大到小排列。冒泡排序的基本思路是:扫描所有未排序数据,每次对相邻元素进行两两比较,如果大小和想要的顺序不一致,则进行位置交换;这样经过一轮扫描后会将最大或最小的数据上浮到未排序数据的最前面(或最后面);对剩下的未排序数据再重复同样的操作,直到所有的数据有序。5.1.2一维数组元素的引用-冒泡排序#defineN12intmain(){intSum[N]={162,164,164,134,140,179,121,147,116,175,172,153};inti,j,temp;for(i=0;i<N-1;i++) //控制比较的次数,N个数据需比较N-1次{for(j=0;j<N-1-i;j++)

//找出每次比较的最大值,并将它挪到最前面{if(Sum[j]<Sum[j+1])

//比较相邻两个数,如果前小后大,则交换{temp=Sum[j];Sum[j]=Sum[j+1];Sum[j+1]=temp;}}}printf("按照由大到小排列的数据为:");for(i=0;i<N;i++)

//输出排好序的数据printf("%d",Sum[i]);return0;}5.1.2一维数组元素的引用-选择排序【例5-4】使用选择排序法将总分按照由大到小排列。选择排序的基本思路是:(1)假定未排序序列中最前面的数据就是值最大(或最小)的数据;(2)将后面的数据依次与最前面的数据比较,如果大于(或小于)值最大(或最小值)的数据,则记录新的最大值(或最小值)数据的位置,后续的数据跟新的最大值(或最小值)比较,这样经过一轮以后,就找出了未排序序列中值最大(或最小)的数据;(3)将值最大(或最小)的数据交换到未排序序列的最前面;(4)余下的数据作为新的未排序序列再重复上述步骤1-3,直到所有数据排序完成。选择排序与冒泡排序的不同在于:冒泡排序是相邻两个数据比较,随之交换,一轮比较过后,最值数据(值最大或最小的数据)就移到最前面或最后面。而选择排序是先遍历未排序的所有数据,记下最值数据的位置,然后再将最值数据交换到未排序数列的最前面。5.1.2一维数组元素的引用-选择排序#defineN12intmain(){intSum[N]={162,164,164,134,140,179,121,147,116,175,172,153};inti,j,k,temp;

//k用来记录每轮最大值数据的位置for(i=0;i<N-1;i++)

//控制比较的次数{k=i;

//假定未排序数列里最前面的数据就是值最大的for(j=i+1;j<N;j++)if(Sum[j]>Sum[k])k=j;/*将未排序数列中后面的每个数据与位置k的数据比较,如果比位置k的数据大,则记录最大值的新位置,即k=j*/if(k!=i) {temp=Sum[i];Sum[i]=Sum[k];Sum[k]=temp;}/*如果k的值发生改变,即位置i的值如果不是未排序数列中最大的,则交换最大值到未排序数列的最前面,

即交换Sum[i]和Sum[k]*/

}printf("按照由大到小排列的数据为:");for(i=0;i<N;i++)printf("%d",Sum[i]);return0;}5.1.2一维数组元素的引用-插入排序【例5-5】使用插入排序法将总分按照由大到小排列。插入排序是通过构建有序序列,对于未排序的数据序列,在已排序序列中从后向前扫描,找到相应的位置并插入。基本思路是:先将待排序序列的第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列;然后从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置,直到所有数据都完成排序;如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。5.1.2一维数组元素的引用-插入排序#defineN12intmain(){intSum[N]={162,164,164,134,140,179,121,147,116,175,172,153};inti,j,k,temp;/*i代表未排序数列的下标,同时也控制比较的轮次。首先假定第0个数据是已排序数据,所以for循环中i从1开始。*/for(i=1;i<N;i++){j=i; //j代表未排序数据中的第一个数据while(j>0){if(Sum[j]>Sum[j-1]){temp=Sum[j];Sum[j]=Sum[j-1];Sum[j-1]=temp;j--;}//如果Sum[j]>Sum[j-1],则将Sum[j]插入到Sum[j-1]的前面,即交换二者位置elsebreak;/*如果Sum[j]<Sum[j-1],则跳出while循环。因为j之前的数据已经按照由大到小排好序,所以只要

Sum[j]<Sum[j-1],则必然Sum[j]<Sum[j-2],所以Sum[j]不需要和前面的每个数比较大小。*/}}printf("按照由大到小排列的数据为:");for(k=0;k<N;k++)printf("%d",Sum[k]);return0;}5.2.1

二维数组的定义二维数组定义的一般形式如下:类型说明符数组名[常量表达式][常量表达式]如:#defineM12 #defineN2 intscore[M][N] charname[12][10] floatmatrix[4][N]

二维数组又称为矩阵,特别适合表达由行列组成的数据结构,所以二维数组中的第一维常称为行,第二维称为列。行和列的下标都从0开始。和一维数组一样,二维数组使用时也要注意行列长度必须是常量,且下标不要越界。5.2.1

二维数组的存储二维数组的所有元素在内存中依然占用一段连续的存储空间,并且是按照先行后列的顺序存储。数组名matrix也是一个地址,同时也代表数组的首地址,即matrix=&matrix[0][0]。matrix[4][2]也可以认为是包含4个元素的一维数组:matrix[0]、matrix[1]、matrix[2]、matrix[3](每个元素又是包含2个值的一维数组),则matrix+1是第一个元素的地址,即:matrix[0]=matrix=&matrix[0][0] matrix[1]=matrix+1=&matrix[1][0]matrix[2]=matrix+2=&matrix[2][0]matrix[3]=matrix+3=&matrix[3][0]而matrix[0]+1则为第0行第1个元素的地址,即:matrix[0]+1=&matrix[0][1]matrix[1]+1=&matrix[1][1]matrix[2]+1=&matrix[2][1]matrix[3]+1=&matrix[3][1]5.2.1

二维数组的初始化(1)按行初始化floatmatrix[4][2]={{1.1,1.2},{2.1,2.2},{3.1,3.2},{4.1,4.2}};按行赋初值时,由于同一行元素都在一个括号里,行与行之间界限清晰,所以代表行的第1维长度可以省略。如:floatmatrix[][2]={{1.1,1.2},{2.1,2.2},{3.1,3.2},{4.1,4.2}};(2)按数组元素在内存的存储顺序初始化floatmatrix[4][2]={1.1,1.2,2.1,2.2,3.1,3.2,4.1,4.2};按照这种方式给全部元素赋初值时,第1维的长度也可以省略,如:floatmatrix[][2]={1.1,1.2,2.1,2.2,3.1,3.2,4.1,4.2};(3)数组元素部分初始化floatmatrix[4][2]={{1.1},{},{3.1},{4.1}};floatmatrix[][2]={{1.1},{},{3.1},{4.1}};//第1维长度可省略floatmatrix[4][2]={1.1,1.2,2.1,3.2};

//第1维长度不可省略特别注意:第2维的长度在任何情况下都不能省略。5.2.2二维数组元素的引用【例5-6】计算表5.1中每位同学的总分,数学成绩和英语成绩由键盘输入。#include<stdio.h>#include<stdlib.h>intmain(){inti,j,student[12][2],sum[12]; //12表示学生数,2指两门课程for(i=0;i<=11;i++) {for(j=0;j<=1;j++)

scanf("%d",&student[i][j]);

sum[i]=student[i][0]+student[i][1];}for(i=0;i<=11;i++)printf("第%d位同学的总分为:%d\n",i+1,sum[i]);return0;}5.2.2二维数组元素的引用-转置【例5-7】将数组student[12][2]中的数据按照学科存储,并计算每门课程的平均分。intmain(){inti,j,course[2][12],student[12][2]={76,86,84,80,92,72,70,64,65,75,90,89,56,65

77,70,61,55,85,90,91,81,80,73};floataverage[2]={0.0};

for(i=0;i<=11;i++)for(j=0;j<=1;j++)course[j][i]=student[i][j];

//行列互换,即矩阵转置for(i=0;i<=1;i++){for(j=0;j<=11;j++) //计算每门课的总分average[i]=average[i]+course[i][j];average[i]=average[i]/12; //计算每门课的平均分}printf("数学和英语的平均分分别为:%.2f,%.2f",average[0],average[1]);return0;}5.2.2二维数组元素的引用-输出图形【例5-8】字符数组使用样例:输出一个由*号组成的三角形,程序输出结果如图5.7所示。#include<stdio.h>#include<stdlib.h>intmain(){chartriangle[5][9]={{'','','','','*','','','',''},{'','','','*','*','*','','','',},{'','','*','*','*','*','*','','',},{'','*','*','*','*','*','*','*','',},{'*','*','*','*','*','*','*','*','*'}};inti,j;for(i=0;i<5;i++){for(j=0;j<9;j++)printf("%c",triangle[i][j]);printf("\n");}return0;}5.2.2循环控制图形的输出【例5-9】输出形如图5.7所示的三角形。#include<stdio.h>#include<stdlib.h>intmain(){inti,j;for(i=1;i<=5;i++)//控制图形的行数{for(j=1;j<=5-i;j++) //控制每一行前面空格的数量printf("");for(j=1;j<=2*i-1;j++)//控制每一行*号的数量printf("*");printf("\n");}return0;}5.2.3多维数组三维及其以上的数组称为多维数组,多维数组的定义方法和二维数组一样,如:intAA[2][3][2];floatBB[3][3][3][3];多维数组依然在一块连续的存储空间中线性存储,如数组AA[2][3][2]的存储顺序为:AA[0][0][0]、AA[0][0][1]、AA[0][1][0]、AA[0][1][1]、AA[0][2][0]、AA[0][2][1]、AA[1][0][0]、AA[1][0][1]、AA[1][1][0]、AA[1][1][1]、AA[1][2][0]、AA[1][2][1]多维数组在存储时,下标变化速度由第1维到最后一维逐渐变快:第1维变化速度最慢,最后一维变化速度最快。三维数组可以认为是由页、行、列组成的数据结构,则数组AA[2][3][2]包含2页3行2列。如:intAA[2][3][2]={{{111,112},{121,122},{131,132}},{{211,212},{221,222},{231,232}}};多维数组初始化也可以把多个元素值都写在一个大括号内,各元素按照内存的存储顺序获得初始值,如:intAA[2][3][2]={111,112,121,122,131,132,211,212,221,222,231,232};5.3字符串C语言中没有专门定义字符串变量的关键字,而是使用字符数组来表示字符串。字符串变量和普通字符数组有相同的地方,但也有很多独有的特点,如:初始化、输入输出、以及大量的字符串函数。5.3.1字符串的定义字符串是以空字符‘\0’作为结束标志的字符数组。如:charstr[7]

特别注意:C语言使用字符数组表示字符串,但是不是所有的字符数组都是字符串,只有以空字符‘\0’结尾的字符数组才是字符串。存放字符串的字符数组一定要大于字符串的长度,但是字符串的长度并不等于字符数组的大小,而是由‘\0’的位置决定。如果字符串末尾有多个空字符‘\0’,则第一个‘\0’就表示字符串结束了。 5.3.1字符串的初始化(1)用字符常量初始化字符串中每一个元素charstr[7]={'Y','a','n','T','a','i','\0'};等价于

charstr[]={'Y','a','n','T','a','i','\0'}; //给全部元素赋值,可以省略数组长度等价于

charstr[7]={'Y','a','n','T','a','i'};

//最后未赋值的元素默认为‘\0’不等价

charstr[]={'Y','a','n','T','a','i'};(2)用字符串常量整体初始化字符串charstr[7]="YanTai"; 等价于

charstr[]="YanTai";等价于 charstr[7]={"YanTai"};等价于 charstr[]={"YanTai"};(3)多个字符串的存储,可以采用二维字符数组,常用初始化方式如下:charname[4][8]={“Tom”,“Clover”,“Anemone”,“Gina”,};等价于 charname[][8]={“Tom”,“Clover”,“Anemone”,“Gina”,};

5.3.2字符串的输出(1)使用putchar()函数或者格式符“%c”配合printf()函数逐个输出字符串中的字符,如:#include<stdio.h>#include<stdlib.h>intmain(){charstr[8]="Hello";inti=0;while(str[i]!='\0') //注意这里的循环结束条件{

printf("%c",str[i]);

//可以替换成:putchar(str[i]);i++;}return0;}逐个输出字符串中的各元素一般需要配合循环结构,可以使用for循环或while循环。5.3.2字符串的输出(2)使用格式符“%s”配合printf()函数将字符串作为一个整体输出,如:#include<stdio.h>#include<stdlib.h>intmain(){charstr[8]="Hello";

printf("%s",str);

return0;}特别注意:用格式符“%s”输出字符串时,printf()函数中的输出项是数组名,而不是数组元素。5.3.2字符串的输出(3)使用puts()函数。puts()函数的功能是向标准输出设备(显示器)输出一个字符串,调用格式为:puts(str);参数str可以是字符串变量(如字符数组名),也可以是字符串常量。puts()函数一次只能输出一个字符串,并且输出后会换行,相当于printf("%s\n",str)。#include<stdio.h>#include<stdlib.h>intmain(){charstr[8]="Hello";puts(str);return0;}5.3.2字符串的输出特别注意:无论采用哪种方式输出字符串,输出的字符中都不包括结束符‘\0’。如果数组长度大于字符串的实际长度,也只输出到‘\0’结束。如果一个字符数组中包含多个‘\0’,则遇第一个‘\0’时输出就结束。5.3.2字符串的输入(1)使用格式符“%s”配合scanf()函数将字符串作为整体输入。#include<stdio.h>#include<stdlib.h>intmain(){charstr1[10],str2[10];

scanf("%s%s",str1,str2);

//输入的多个串中间应以空格或回车做间隔puts(str1);puts(str2);return0;}用scanf()函数输入的字符串中不能含有空格和回车。5.3.2字符串的输入(2)使用gets()函数将字符串作为整体输入。gets()函数的调用格式为:gets(str);参数str只能是字符串变量(如字符数组名)。#include<stdio.h>#include<stdlib.h>intmain(){charstr[10];gets(str);

puts(str);return0;}使用gets()函数为字符串赋值时,一次只能为一个字符串赋值,以回车结束输入。即可以读入含空格符的字符串。5.3.2字符串的输入字符串的输入特别注意以下几点:(1)使用scanf()函数配合格式符“%s”为字符串整体赋值时,数组名前不需要加取地址符号&;而使用“%c”为字符串中的元素逐字符赋值时,数组元素前需要加取地址符号&。(2)使用scanf()函数为多个字符串赋值,中间要以空格或者回车做间隔,即使用scanf()函数赋值的字符串不可能包含空格。(3)使用gets()函数赋值的字符串以回车结束输入,字符串中可以包含空格。(4)字符串的输入也可以使用scanf()函数配合格式符“%c”或者getchar()函数为字符串中的各个元素逐字符的赋值。但因为字符串的长度和相应字符数组的大小不一定完全一致,所以不方便使用循环结构控制输入,最好用多个“%c”或者getchar()函数控制输入,比较麻烦,一般不用。5.3.2字符串的处理案例【例5-15】同学小王要编写程序处理表5.1中的学生姓名,他先将所有同学姓名存储在字符串中,在输入姓名时使用了gets()函数,结果导致姓名之间的空格也成为字符串的一部分,形如:"TomCloverAnemoneGinaPeterAntonyAugusDemiAndrewJohnJackThomas"请编写程序将名字分离出来。注意,名字之间的空格不一定只有一个。5.3.2字符串的处理案例intmain(){charstring[120]={"TomCloverAnemoneGinaPeterAntonyAugusDemiAndrewJohnJackThomas"};inti=0,j=0,k=0,flag=0;charname[12][10]={""};

//第一维代表单词个数,第二维表示每个单词内的字符个数:最多10个。

while(string[i]!='\0'){

if(string[i]==''){i++;flag=1;}//如果字符为空格,则证明现在不在某单词内,则继续看下一个字符。

if(string[i]!='')

//如果字符不为空格,则证明现在是在某一个单词中{

if(flag==1){j++;k=0;flag=0;}/*如果flag=1,说明前一个字符为空格;而现在不是空格,说明单词刚开始,则

代表单词个数的j++,同时代表每一个单词内字符个数的k归零。flag置零,为下一个单词的判断做准备*/name[j][k]=string[i]; //将字符复制到二维数组中k++;

//代表每一个单词内字符个数的k++i++;

//string中的字符后移}}for(i=0;i<=11;i++)puts(name[i]);return0;}5.3.3常用字符串函数1.求字符串长度函数strlen()2.字符串复制函数strcpy()和strncpy()3.字符串比较函数strcmp()和strncmp()4.字符串连接函数strcat()和strncat()5.字符串大小写变换函数strlwr()和strupr()6.字符串查找函数strstr()7.字符串分割函数strtok()这些字符串处理函数都是C语言的库函数,使用时,应当在程序文件的开头用#include<string.h>包含相应的头文件。5.3.3常用字符串函数-求字符串长度strlen()strlen()函数可以统计字符串中有效字符的个数。有效字符为字符串中第一个’\0’之前的所有字符。strlen()函数的调用格式为:strlen(str);例如:charstr[100]="1234abcd"; strlen(str);

strlen("1234\0abcd");

strlen("abcd\012");

strlen("abcd\01234");

strlen("1234\\0abcd");

strlen()函数使用时需要注意以下几点:(1)当遇到转义字符‘\0’后面还有数字时,则应将后面的数字(一至二位)与前面的‘\0’相结合作为一个字符计入整个字符串长度。0和后面的一到两位数字组成一个八进制数,如\012则表示ASCII码值为10的字符,即换行\n。(2)当遇到连续两个‘\’时(即‘\\’),则第1个‘\’为转义字符,表示第2个‘\’不再有转义作用,而是代表本身,即‘\\’表示字符‘\’本身。因此,“\\0”表示两个字符:‘\’和‘0’。5.3.3常用字符串函数-字符串复制函数strcpy()字符串的整体赋值可以使用strcpy()函数,其调用格式如下:strcpy(str1,str2);strcpy()函数将字符串str2从第一个字符开始到第一个’\0’(包括’\0’)的全部字符复制到字符串str1中,且从字符串str1的首地址开始存放。第1个参数str1必须是字符串变量,第2个参数str2可以是字符串变量,也可以是字符串常量,且str1要足够大,能容纳str2。如:charstr1[10]={"abcdefgh"},str2[10]={"Hello"};

strcpy(str1,str2); printf("%s",str1);

strcpy(str1,"World");

printf("%s",str1); 5.3.3常用字符串函数-部分复制函数strncpy()strncpy()函数能将一个字符串中的部分字符复制另一个字符串中,其调用形式为:strncpy(str1,str2,n);strncpy()函数将字符串str2中的前n个字符复制到字符串str1中,代替了str1中的前n个字符,n为整数。str1要足够大,能够容纳n个字符。如:charstr1[10]={"123456"},str2[10]={"Hello"};

strncpy(str1,str2,3);

strncpy(str1,"World",3); 5.3.3常用字符串函数-字符串比较函数strcmp()专门用于字符串比较的函数:strcmp(),其调用形式为:strcmp(str1,str2);比较的规则是:将两个字符串从第1个字符开始,逐个字符比较其ASCII码值的大小,直到出现不同的字符能比较出大小为止。注意,字符串结束标记‘\0’也参与比较,它是ASCII码值最小的字符。(1)如果str1与str2相同,则函数返回0。(2)如果str1>str2,则函数返回一个正整数。(3)如果str1<str2,则函数返回一个负整数。字符串str1和str2可以是字符串变量(如字符数组名),也可以是字符串常量。例如:

charstr1[20]="Hello",str2[20]="World";

strcmp(str1,str2);

strcmp("HelloWorld","Hello");

strcmp("Hello","Hello"); 5.3.3常用字符串函数-字符串比较函数strncmp()strncmp()函数可以比较两个字符串中指定的前n个字符,n为整数,比较规则与strncmp()相同。strncmp()函数调用格式如下:strncmp(str1,str2,n);例如:strncmp("HelloWorld","Hello",5); strncmp("HelloWorld","Hello",6); 5.3.3常用字符串函数-字符串连接函数strcat()strcat()函数可以把两个字符串连接起来,其调用形式为:strcat(str1,str2);strcat()函数把str2中的有效字符接到str1的有效字符后面,结果放在str1中。所以str1必须足够大,以便容纳连接后的新字符串。连接时将字符串1后面的′\0′取消,只在新串最后保留′\0′。str1只能是字符串变量(如字符数组名),str2可以是字符串变量,也可以是字符串常量。如:charstr1[100]={"Hello"},str2[100]={"World"};strcat(str1,str2); strcat(str1,"World");

5.3.3常用字符串函数-字符串连接函数strncat()strncat()函数可以将一个字符串的前n个字符和另一个串连接在一起形成一个新串,其调用形式如下:strncat(str1,str2,n);它将字符串str2中的前n个字符连接到串str1的后面,n为整数。str1要足够大,能容纳连接后的新字符串。如:charstr1[100]={"Hello"},str2[100]={"World"}; strncat(str1,str2,2); strncat(str1,"World",2);

5.3.3常用字符串函数-strlwr()和strupr()strlwr()函数将字符串中的大写字母变成小写字母,调用形式如下:strlwr(str);strupr()函数将字符串中的小写字母变成大写字母,调用形式如下:strupr(str);参数str只能是字符串变量,如:charstr[20]={"IT'Sacat"};strlwr(str); strupr(str);

5.3.3常用字符串函数-字符串查找函数strstr()strstr()函数可以判断一个字符串是否被包含在另一个字符串中,其调用形式如下:strstr(str1,str2);如果字符串str2包含在字符串str1中,则返回str2在str1中首次出现的地址,否则返回NULL。str1和str2既可以是字符串变量,也可以是字符串常量如:charstr1[100]={"HelloWorld"},str2[100]={"World"};

puts(strstr(str1,str2)); //输出World

puts(strstr("","ytu")); //输出注意:如果在str1中找到str2,则输出时,会输出子串str2及其后的字符,直到遇到’\0’。因为strstr()函数返回的是str2在str1中首次出现的地址,所以输出时,从这个地址开始一直输出到字符串结束。

5.3.3常用字符串函数-字符串分割

温馨提示

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

评论

0/150

提交评论