1 第 4 章字符串数组、元胞数组和结构数组 4.1 字符串数组 4.2 元胞数组(单元数组) 4.3 结构数组(构架数组)
第 9 讲 字符型数组及应用
-
Upload
portia-benson -
Category
Documents
-
view
49 -
download
7
description
Transcript of 第 9 讲 字符型数组及应用
![Page 1: 第 9 讲 字符型数组及应用](https://reader036.fdocuments.net/reader036/viewer/2022082407/56812b0a550346895d8eef8a/html5/thumbnails/1.jpg)
第第 99 讲 字符型数组及应用讲 字符型数组及应用
![Page 2: 第 9 讲 字符型数组及应用](https://reader036.fdocuments.net/reader036/viewer/2022082407/56812b0a550346895d8eef8a/html5/thumbnails/2.jpg)
第第99讲 字符型数组及应用讲 字符型数组及应用
本讲主要内容 字符数组的定义及初始化 字符串输入输出操作 常用的字符串操作函数 字符型数组的应用
![Page 3: 第 9 讲 字符型数组及应用](https://reader036.fdocuments.net/reader036/viewer/2022082407/56812b0a550346895d8eef8a/html5/thumbnails/3.jpg)
第第99讲 字符型数组及应用讲 字符型数组及应用
教学目标掌握字符串的输入输出方法,熟悉常用的字符串操作函数;学会使用字符数组解决实际问题的基本方法,能用一维字符数组和二维字符数组解决简单的实际问题。
![Page 4: 第 9 讲 字符型数组及应用](https://reader036.fdocuments.net/reader036/viewer/2022082407/56812b0a550346895d8eef8a/html5/thumbnails/4.jpg)
一、字符数组的定义、初始化一、字符数组的定义、初始化 字符数组的定义 字符型数组是数据类型为字符型的数组,用于存
放字符数据,每一个元素存放一个字符。字符型数组与数值型数组在本质上没有区别,但在具体使用时,还是有其自身的特点,因此对字符型一维数组的初始化进行专门的介绍。
定义格式如下:char 数组名 [数组长度 ] 例如:char array[10];
![Page 5: 第 9 讲 字符型数组及应用](https://reader036.fdocuments.net/reader036/viewer/2022082407/56812b0a550346895d8eef8a/html5/thumbnails/5.jpg)
一、字符数组的定义、初始化一、字符数组的定义、初始化 字符数组的初始化 ⑴对字符数组初始化时,通常使用转义字符常量 '\
0'作为末尾元素值。例如:char string[8]={'e','x','a','m','p','l','e','\0'};
⑵ 可以使用一个字符串常量为字符数组赋初值。例如,上述对数组 string的定义可使用如下形式:
char string[8]="example"; ⑶ 初始化时,省略对数组长度的说明后,数组的实际长度由系统根据初始化的形式确定。例如:
char string[]="example";
![Page 6: 第 9 讲 字符型数组及应用](https://reader036.fdocuments.net/reader036/viewer/2022082407/56812b0a550346895d8eef8a/html5/thumbnails/6.jpg)
二、字符串输入输出操作二、字符串输入输出操作
用“ %c” 格式符输入输出字符串。 例 7-3 输入 20 个字符,分别统计其中的数字
个数和其他字符的个数。
![Page 7: 第 9 讲 字符型数组及应用](https://reader036.fdocuments.net/reader036/viewer/2022082407/56812b0a550346895d8eef8a/html5/thumbnails/7.jpg)
二、字符串输入输出操作二、字符串输入输出操作 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 讲 字符型数组及应用](https://reader036.fdocuments.net/reader036/viewer/2022082407/56812b0a550346895d8eef8a/html5/thumbnails/8.jpg)
二、字符串输入输出操作二、字符串输入输出操作
用“ %s” 格式符输入输出字符串。例如:char c[6];scanf("%s",c);printf("%s",c);说明:⑴ C 语言中,数组名代表该数组的起始地址,因此, scanf
() 函数中数组名前不再加地址运算符 & 。⑵ “%s” 格式输出字符串时, printf() 函数的输出项是字符
数组名,而不是元素名。如下用法是错误的:printf("%s",c[0]);
![Page 9: 第 9 讲 字符型数组及应用](https://reader036.fdocuments.net/reader036/viewer/2022082407/56812b0a550346895d8eef8a/html5/thumbnails/9.jpg)
二、字符串输入输出操作二、字符串输入输出操作
输出字符串函数 puts() 格式: puts( 字符数组名 ) 功能:输出存储在字符数组中的字符串。 例如: char c[6]="China"; puts(c); 结果: China
![Page 10: 第 9 讲 字符型数组及应用](https://reader036.fdocuments.net/reader036/viewer/2022082407/56812b0a550346895d8eef8a/html5/thumbnails/10.jpg)
二、字符串输入输出操作二、字符串输入输出操作
输入字符串函数 gets() 格式: gets( 字符数组名 ) 功能:从键盘输入一个字符串,并存储在指
定数组中。 例如: char str[12]; gets(str); 执行 gets() 函数后,系统等待从键盘输入一
个字符串。
![Page 11: 第 9 讲 字符型数组及应用](https://reader036.fdocuments.net/reader036/viewer/2022082407/56812b0a550346895d8eef8a/html5/thumbnails/11.jpg)
三三、常用的字符串操作函数、常用的字符串操作函数
连接字符串函数 strcat() 格式: strcat(s1,s2)功能:把字符串 s2 连接到字符串 s1 的后面。其中,
s1 、 s2 既可以是字符数组名,也可以是字符串常量。
![Page 12: 第 9 讲 字符型数组及应用](https://reader036.fdocuments.net/reader036/viewer/2022082407/56812b0a550346895d8eef8a/html5/thumbnails/12.jpg)
三三、常用的字符串操作函数、常用的字符串操作函数
例 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 讲 字符型数组及应用](https://reader036.fdocuments.net/reader036/viewer/2022082407/56812b0a550346895d8eef8a/html5/thumbnails/13.jpg)
三三、常用的字符串操作函数、常用的字符串操作函数
复制字符串函数 strcpy()格式: strcpy(s1,s2)功能:把字符串 s2 复制到字符数组 s1 中。说明:s1 只能是字符数组名或字符数组的开始地址; s2
可以是数组名,也可以是一个字符串。
![Page 14: 第 9 讲 字符型数组及应用](https://reader036.fdocuments.net/reader036/viewer/2022082407/56812b0a550346895d8eef8a/html5/thumbnails/14.jpg)
三三、常用的字符串操作函数、常用的字符串操作函数
例 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 讲 字符型数组及应用](https://reader036.fdocuments.net/reader036/viewer/2022082407/56812b0a550346895d8eef8a/html5/thumbnails/15.jpg)
三三、常用的字符串操作函数、常用的字符串操作函数
字符串比较函数 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 讲 字符型数组及应用](https://reader036.fdocuments.net/reader036/viewer/2022082407/56812b0a550346895d8eef8a/html5/thumbnails/16.jpg)
四、字符型数组的应用四、字符型数组的应用
例 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 讲 字符型数组及应用](https://reader036.fdocuments.net/reader036/viewer/2022082407/56812b0a550346895d8eef8a/html5/thumbnails/17.jpg)
四、字符型数组的应用四、字符型数组的应用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 讲 字符型数组及应用](https://reader036.fdocuments.net/reader036/viewer/2022082407/56812b0a550346895d8eef8a/html5/thumbnails/18.jpg)
四、字符型数组的应用四、字符型数组的应用 例 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 讲 字符型数组及应用](https://reader036.fdocuments.net/reader036/viewer/2022082407/56812b0a550346895d8eef8a/html5/thumbnails/19.jpg)
四、字符型数组的应用四、字符型数组的应用
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 讲 字符型数组及应用](https://reader036.fdocuments.net/reader036/viewer/2022082407/56812b0a550346895d8eef8a/html5/thumbnails/20.jpg)
字符型数组及应用字符型数组及应用 -- 小结小结
本单元通过本单元通过 77 个实例介绍了一维数组和二维数组的应用知识,使用数个实例介绍了一维数组和二维数组的应用知识,使用数组解决问题的一般过程总结如下:组解决问题的一般过程总结如下:
定义大小合适的数组。为了方便数组长度调整和程序调试,通常将定义大小合适的数组。为了方便数组长度调整和程序调试,通常将数组的长度值首先定义为符号常数,然后再用于数组定义中。数组的长度值首先定义为符号常数,然后再用于数组定义中。
为数组输入数据。为数组输入数据。 数组元素的运算处理,如排序、查找、判断统计、元素求和等。数组元素的运算处理,如排序、查找、判断统计、元素求和等。 输出结果。当需要对二维数组输出时,应注意每输出一行后的换行输出结果。当需要对二维数组输出时,应注意每输出一行后的换行
操作,使输出的结果为行列形式。操作,使输出的结果为行列形式。 字符型数组具有数组的一切性质,但又有其特点,对字符型数组的
操作对应有大量的操作函数,如字符串复制、连接、比较等均有专门的函数予以实现。