第 9 讲 字符型数组及应用

20
9 9 第第第第第第第第 第第第第第第第第

description

第 9 讲 字符型数组及应用. 第 9 讲 字符型数组及应用. 本讲主要内容 字符数组的定义及初始化 字符串输入输出操作 常用的字符串操作函数 字符型数组的 应用. 第 9 讲 字符型数组及应用. 教学目标 掌握字符串的输入输出方法,熟悉常用的字符串操作函数; 学会使用 字符 数组解决实际问题的基本方法 , 能用一维 字符 数组和二维 字符 数组解决简单的实际问题。. 一、字符数组的定义、初始化. 字符数组的定义 - PowerPoint PPT Presentation

Transcript of 第 9 讲 字符型数组及应用

Page 1: 第 9 讲 字符型数组及应用

第第 99 讲 字符型数组及应用讲 字符型数组及应用

Page 2: 第 9 讲 字符型数组及应用

第第99讲 字符型数组及应用讲 字符型数组及应用

本讲主要内容 字符数组的定义及初始化 字符串输入输出操作 常用的字符串操作函数 字符型数组的应用

Page 3: 第 9 讲 字符型数组及应用

第第99讲 字符型数组及应用讲 字符型数组及应用

教学目标掌握字符串的输入输出方法,熟悉常用的字符串操作函数;学会使用字符数组解决实际问题的基本方法,能用一维字符数组和二维字符数组解决简单的实际问题。

Page 4: 第 9 讲 字符型数组及应用

一、字符数组的定义、初始化一、字符数组的定义、初始化 字符数组的定义   字符型数组是数据类型为字符型的数组,用于存

放字符数据,每一个元素存放一个字符。字符型数组与数值型数组在本质上没有区别,但在具体使用时,还是有其自身的特点,因此对字符型一维数组的初始化进行专门的介绍。

定义格式如下:char 数组名 [数组长度 ] 例如:char array[10];

Page 5: 第 9 讲 字符型数组及应用

一、字符数组的定义、初始化一、字符数组的定义、初始化 字符数组的初始化  ⑴对字符数组初始化时,通常使用转义字符常量 '\

0'作为末尾元素值。例如:char string[8]={'e','x','a','m','p','l','e','\0'};

⑵ 可以使用一个字符串常量为字符数组赋初值。例如,上述对数组 string的定义可使用如下形式:

char string[8]="example"; ⑶ 初始化时,省略对数组长度的说明后,数组的实际长度由系统根据初始化的形式确定。例如:

char string[]="example";

Page 6: 第 9 讲 字符型数组及应用

二、字符串输入输出操作二、字符串输入输出操作

用“ %c” 格式符输入输出字符串。 例 7-3 输入 20 个字符,分别统计其中的数字

个数和其他字符的个数。

Page 7: 第 9 讲 字符型数组及应用

二、字符串输入输出操作二、字符串输入输出操作 case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': numb

er++;break;default: other++; } printf("number: %d, other: %

d\n",number,other);}

main(){ char s[20]; int i,number=0,other=0; printf("Input a string: ");for(i=0;i<20;i++) scanf("%c",&s[i]); for(i=0;i<20;i++) switch(s[i]) { case '0': case '1':

Page 8: 第 9 讲 字符型数组及应用

二、字符串输入输出操作二、字符串输入输出操作

用“ %s” 格式符输入输出字符串。例如:char c[6];scanf("%s",c);printf("%s",c);说明:⑴ C 语言中,数组名代表该数组的起始地址,因此, scanf

() 函数中数组名前不再加地址运算符 & 。⑵ “%s” 格式输出字符串时, printf() 函数的输出项是字符

数组名,而不是元素名。如下用法是错误的:printf("%s",c[0]);

Page 9: 第 9 讲 字符型数组及应用

二、字符串输入输出操作二、字符串输入输出操作

 输出字符串函数 puts()  格式: puts( 字符数组名 ) 功能:输出存储在字符数组中的字符串。 例如: char c[6]="China"; puts(c); 结果: China

Page 10: 第 9 讲 字符型数组及应用

二、字符串输入输出操作二、字符串输入输出操作

输入字符串函数 gets() 格式: gets( 字符数组名 ) 功能:从键盘输入一个字符串,并存储在指

定数组中。 例如: char str[12]; gets(str); 执行 gets() 函数后,系统等待从键盘输入一

个字符串。

Page 11: 第 9 讲 字符型数组及应用

三三、常用的字符串操作函数、常用的字符串操作函数

连接字符串函数 strcat() 格式: strcat(s1,s2)功能:把字符串 s2 连接到字符串 s1 的后面。其中,

s1 、 s2 既可以是字符数组名,也可以是字符串常量。

Page 12: 第 9 讲 字符型数组及应用

三三、常用的字符串操作函数、常用的字符串操作函数

例 7-5 字符串连接main(){ char c1[10]="China",c2[10]= "man"; strcat(c1,c2); printf("String c1: "); puts(c1); /* 输出字符串 c1 */ printf("String c2: "); puts(c2); /* 输出字符串 c2 */}

Page 13: 第 9 讲 字符型数组及应用

三三、常用的字符串操作函数、常用的字符串操作函数

复制字符串函数 strcpy()格式: strcpy(s1,s2)功能:把字符串 s2 复制到字符数组 s1 中。说明:s1 只能是字符数组名或字符数组的开始地址; s2

可以是数组名,也可以是一个字符串。

Page 14: 第 9 讲 字符型数组及应用

三三、常用的字符串操作函数、常用的字符串操作函数

例 7-6 字符串复制/* 程序 e706.c */#include"stdio.h"main(){ char c1[20]="program",c2[10]="example"; strcpy(c1,c2); printf("String c1: "); puts(c1); printf("String c2: "); puts(c2); }

Page 15: 第 9 讲 字符型数组及应用

三三、常用的字符串操作函数、常用的字符串操作函数

字符串比较函数 strcmp()格式: strcmp(s1,s2)功能:比较字符串 s1 和字符串 s2 的大小。 s1 与 s2 相同

时, strcmp(s1,s2) 的值为 0 ; s1 大于 s2 时, strcmp(s1,s2) 的值为一个正数; s1 小于 s2 时, strcmp(s1,s2) 的值为一个负数。

字符串比较就是比较字符串中字符的 ASCII 码, ASCII 码值大的字符串大。比较的方法是对两个字符串自左至右逐个字符比较,直到遇到不同字符或 '\0' 时比较过程结束,此时, ASCII 码值大的字符所在的字符串大。

Page 16: 第 9 讲 字符型数组及应用

四、字符型数组的应用四、字符型数组的应用

例 8-3 输入一行字符,统计其中单词的个数。  设长度是 n 的字符串已存储在字符数组 text 中,

各字符元素分别为 text[0] 、 text[1] 、 text[2]……text[n-1] ,当检测 text[i] ( i>0 )时,若满足下列条件,则必然出现新单词:

  text[i-1]==''&&text[i]!=''

Page 17: 第 9 讲 字符型数组及应用

四、字符型数组的应用四、字符型数组的应用main(){ char text[100]; int word,i; gets(text); if(text[0]==' ')word=0; else if(text[0]!='\0')word=1; i=1; while(text[i]!='\0') { if(text[i-1]==' '&&text[i]!=' ')word++; i++; } printf("word=%d\n",word);   }

Page 18: 第 9 讲 字符型数组及应用

四、字符型数组的应用四、字符型数组的应用 例 8-4 判断 s2 是否是 s1 的子串。 基本思路:从 s1 字符串的第一个字符开始,依次

与 s2 字符串的各字符比较,若均相同,则 s2 是 s1 的子串;否则再从 s1 的下一个字符(第 2 个字符)开始,依次与 s2 字符串的各字符比较,……。设 k1 , k2 分别表示 s1 串和 s2 串的长度,则最后一次应从 s1 的第 k1-k2+1 个字符开始(即 s1[k1-k2] ),依次与 s2 字符串的各字符比较,若存在不同字符,则 s2 肯定不是 s1 的子串。

Page 19: 第 9 讲 字符型数组及应用

四、字符型数组的应用四、字符型数组的应用

main( ){ char s1[80],s2[80]; int i=0, j, k, k1, k2, flag; gets(s1); gets(s2); k1=strlen(s1); k2=strlen(s2); flag=0;

while(i<k1-k2+1&&!flag) { j=0; k=i; while(s2[j]&&s1[k]==s2[j]) { j++; k++; } if (s2[j]=='\0') {flag=1; break; } i++; } if(flag==1) printf ("%s is in %s.\n",s2,

s1); else printf ("%s is not in %s.\n",s2,s1);

}

Page 20: 第 9 讲 字符型数组及应用

字符型数组及应用字符型数组及应用 -- 小结小结

本单元通过本单元通过 77 个实例介绍了一维数组和二维数组的应用知识,使用数个实例介绍了一维数组和二维数组的应用知识,使用数组解决问题的一般过程总结如下:组解决问题的一般过程总结如下:

定义大小合适的数组。为了方便数组长度调整和程序调试,通常将定义大小合适的数组。为了方便数组长度调整和程序调试,通常将数组的长度值首先定义为符号常数,然后再用于数组定义中。数组的长度值首先定义为符号常数,然后再用于数组定义中。

为数组输入数据。为数组输入数据。 数组元素的运算处理,如排序、查找、判断统计、元素求和等。数组元素的运算处理,如排序、查找、判断统计、元素求和等。 输出结果。当需要对二维数组输出时,应注意每输出一行后的换行输出结果。当需要对二维数组输出时,应注意每输出一行后的换行

操作,使输出的结果为行列形式。操作,使输出的结果为行列形式。 字符型数组具有数组的一切性质,但又有其特点,对字符型数组的

操作对应有大量的操作函数,如字符串复制、连接、比较等均有专门的函数予以实现。