当前位置:文档之家› 13 《C语言程序设计》教案 第四章 数组(3)—字符数组和字符串

13 《C语言程序设计》教案 第四章 数组(3)—字符数组和字符串

2)拷贝时连同字符串后面的‘\0’一起拷贝到字符数组中。
3)不能用赋值语句将一个字符串常量或字符数组直接赋给一个字符数组。
下面的用法是错误的:str1={“china”};str1=str2;而只能用拷贝函数strcpy处理。
用赋值语句只能将一个字符赋给一个字符型变量或字符数组元素。
如下面是合法的:char a[5],c1,c2;c1=‘A’;c2=‘B’;a[0]=‘c’;a[1]=‘h’;a[2]=‘i’;a[3]=‘n’;a[4]=‘a’;
int i;
for(i=0;i<10;i++)
printf(″%d″,*(a+i));

运行结果:
1 2 3 4 5 6 7 8 9 10
方法三:用指针法
main()

int a[10]; int i,*p;
for(i=0;i<10;i++)
scanf(″%d″,&a[i]);
for(p=a;p<(a+10);p++)
板书:puts(str);与printf(”%s\n”,str)等价或puts(“OK!”);与printf(“%s\n”,”OK!”)或printf(“OK!\n”)等价
(2)字符串输入函数
格式:gets(字符数组)
功能:从终端输入一个字符串(可包含空格)以回车为输入结束标志,将接受到的字符依次赋值给字符数组各个元素,并自动在字符串末尾加结束标记‘\0’。例如:gets(str);
格式:strcpy(字符数组,字符串)
功能:将字符串拷贝到字符数组中去。
例如:
char str1[10],str2[]={“china”};
strcpy(str1,str2); /*或strcpy(str1,“china”); */
执行后str1的内容为:china\0\0\0\0\0
说明:
1)字符数组必须足够大,以便能容纳被拷贝的字符串。
int i=0;
printf(“输入一个字串:”);
gets(s);
strlwr(s);
printf(“输出转换后的字串:”);
puts(s);
}
2)从字符串中取出指定长度的子串。
#include <stdio.h>
main()
{
char s1[40],s2[40];
int i=0,m;
printf(“\n输入要截取子串的母串:”);
例如:
char str1[30]={“people′s republic of”};
char str2[]={“china”};
printf(“%s”,strcat(str1,str2));
输出:people′s republic of china
说明:1)字符串1必须足够大,以便能容纳连接后的新字符串。
2)连接前两个字符串后面都有一个‘\0’,连接时将字符串1后面的‘\0’取消,只在新串的最后保留一个‘\0’。
思考:以下程序是正确的char c; c=’A’+’B’;那么,下面的程序呢?char c[10];c=”A”+”B”;是不正确的,必须用strcat()函数来连接。
(4)字符串拷贝函数strcpy
#include<string.h>
(1)字符串输出函数
格式:puts(字符串)
功能:将一个字符串(以‘\0’为结束标志)输出到终端。输出的字符串中可以包含转义字符。例如: char str[]={“China\nBei jing”};puts(str);
输出:China
Bei jing
在输出时将字符串结束标志‘\0’转换成‘\n’,即输出完字符串后换行。
功能:测试字符串长度,函数值为字符串中实际长度,不包括‘\0’。例如:
char str[10]={“china”};
printf(“%d”,strlen(str));
结果为: 5
(7)字符串小写函数
格式:strlwr(字符串)
功能:将字符串中大写字母转换成小写字母。lwr是lowercase(小写)的缩写。
main()

char string[20],str[3][20];
int i;
for(i=0;i<3;i++)
gets(str[i]); /*输入3个字符串*/
if(strcmp(str[0],str[1])>0)/*用字符串比较函数*/
strcpy(string,str[0]);
else
strcpy(string,str[1]);
str[2]:India\0
可以把str[0],str[1],str[2]看做三个一维字符数组,它们各有20个元素。把它们如同一维数组那样进行处理。可以用gets函数分别读入三个字符串。经过二次比较,就可得到值最大者,把它放在一维字符数组string中。
#include<stdio.h>
#include<string.h>
注意:用puts和gets函数只能输入或输出一个字符串,不能写成:puts(str1,str2);或:gets(str1,str2);说明:字符串可以是字符数组或字符串常量。
而scanf()是以回车、空格或tab键做分隔符的。
例:void main()
{
char s[100];
printf(“请输入一个字符串:”);
printf(″%d″,*p);

运行结果:
1 2 3 4 5 6 7 8 9 10
三种方法比较:以上方法(1)与(2)相同。因为系统把a[i]按*(a+i)处理的,需要计算元素的地址,然后再取数据。方法(3)是直接从地址中取数据,不需计算,所以速度快。但方法(1)比较直观。
在数组中使用指针应注意以下几点:(1)可以p++,不能a++,因为数组名a是一个不可以改变值的地址常量。(2)要注意指针变量的当前值。(3)在定义数组时,若用指针变量,可以不指定数组的长度。
(1)数组的指针和指向数组的指针变量
1)指向一维数组的指针
C语言中,数组名代表该数组的首地址,即数组中第一个元素的地址。将一维数组的名字或某个数组元素的地址赋给指针变量,指针变量即指向该一维数组或数组元素。
例如:int a[10],*p;
p=a; /*把数组的起始地址赋给指针变量p */
p=&a[0];把a[0]元素的地址赋给指针变量p。因为a[0]是数组第1个元素,指向数组的指针示意图如图6-6所示。
《C语言程序设计》课程教案表
授课题目
第四章数组(3)——字符数组和字符串
课时安排
2
授课时间
教学目的和要求
1.掌握:几种常用的字符串处理函数
2.熟悉:指针与数组。
教学内容
1.基本内容:(1)几种常用的字符串处理函数(2)指针与数组。
2.重点:几种常用的字符串处理函数
3.难点:指针与数组
讲课进程和时间分配
1.字符串1==字符串2,函数值=0;
2.字符串1>字符串2,函数值>0;
3.字符串1<字符串2,函数值<0。
两个字符串的比较,不能用以下形式str1==str2或str1>str2只能用strcmp(str1,str2)>0或==0或<0来判断
(6)测试字符串长度函数
格式:strlen(字符数组)
if(c==‘m’|| c==‘M’)
a++;
else
b++;

printf(“男生数为%d\n女生数为%d\n”,a,b);

4)有三个字符串,要求找出其中最大者
分析:有一个二维的字符数组str[3][20],大小为3×20。即有3行20列,每一行可以容纳20个字符。
str[0]:China\0
str[1]:Japan\0
int *p,a[];
p=a;
用指针变量来读取数组元素,需要注意指针的++与--运算,例:若int a[10] ,*p; p=a;则:
1)p++(或p+=1)操作
指针p指向下一元素,即a[1];若再执行*p,则取数组元素a[1]的值。
2)*p++;等价于*(p++)
由于++和*同优先级,自右向左结合,则实现的功能是先得到p所指向的数组元素值(即*p),然后再执行p++操作。
if(strcmp(str[2],string)>0)
strcpy(string,str[2]);
printf(“\n the largest string is: %s\n”,string);

3、指针与数组(35分钟)
在C语言中,指针和数组的关系非常密切,引用数组元素既可以通过下标,也可以通过指针来进行。正确地使用数组的指针来处理数组元素,能够产生高质量的目标代码。
设有以下语句:
int a[10],*p;
p=a;
把p置为指向数组a的第1个元素,即p包含了a[0]的地址。*p为a[0]的值。
如果指针p+1,则指向a的下一个元素,如图6-7所示。
图6-7指针引用一维数组元素
根据以上所述,引用一维数组元素,可以用两种方法:
①下标法,如a[i]或p[i]形式;
②指针法,如*(a+i)或*(p+i)。
4)可以用strcpy函数将字符串中前面若干个字符拷贝到字符数组中去。
例如:strcpy(str1,str2,2);
相关主题