1 / 20

第 9 讲 字符型数组及应用

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

Télécharger la présentation

第 9 讲 字符型数组及应用

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

  4. 一、字符数组的定义、初始化 • 字符数组的定义    字符型数组是数据类型为字符型的数组,用于存放字符数据,每一个元素存放一个字符。字符型数组与数值型数组在本质上没有区别,但在具体使用时,还是有其自身的特点,因此对字符型一维数组的初始化进行专门的介绍。 定义格式如下: char数组名[数组长度] 例如: char array[10];

  5. 一、字符数组的定义、初始化 • 字符数组的初始化 ⑴ 对字符数组初始化时,通常使用转义字符常量'\0'作为末尾元素值。例如: char string[8]={'e','x','a','m','p','l','e','\0'}; ⑵ 可以使用一个字符串常量为字符数组赋初值。例如,上述对数组string的定义可使用如下形式: char string[8]="example"; ⑶ 初始化时,省略对数组长度的说明后,数组的实际长度由系统根据初始化的形式确定。例如: char string[]="example";

  6. 二、字符串输入输出操作 • 用“%c”格式符输入输出字符串。 例7-3 输入20个字符,分别统计其中的数字个数和其他字符的个数。

  7. 二、字符串输入输出操作 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': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': number++;break; default: other++; } printf("number: %d, other: %d\n",number,other); }

  8. 二、字符串输入输出操作 • 用“%s”格式符输入输出字符串。 例如: char c[6]; scanf("%s",c); printf("%s",c); 说明: ⑴C语言中,数组名代表该数组的起始地址,因此,scanf()函数中数组名前不再加地址运算符&。 ⑵“%s”格式输出字符串时,printf()函数的输出项是字符数组名,而不是元素名。如下用法是错误的: printf("%s",c[0]);

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

  10. 二、字符串输入输出操作 • 输入字符串函数gets()  格式:gets(字符数组名)  功能:从键盘输入一个字符串,并存储在指定数组中。 例如: char str[12]; gets(str); 执行gets()函数后,系统等待从键盘输入一个字符串。

  11. 三、常用的字符串操作函数 • 连接字符串函数strcat() 格式:strcat(s1,s2) 功能:把字符串s2连接到字符串s1的后面。其中,s1、s2既可以是字符数组名,也可以是字符串常量。

  12. 三、常用的字符串操作函数 例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 */ }

  13. 三、常用的字符串操作函数 • 复制字符串函数strcpy() 格式:strcpy(s1,s2) 功能:把字符串s2复制到字符数组s1中。 说明: s1只能是字符数组名或字符数组的开始地址;s2可以是数组名,也可以是一个字符串。

  14. 三、常用的字符串操作函数 例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); }

  15. 三、常用的字符串操作函数 • 字符串比较函数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码值大的字符所在的字符串大。

  16. 四、字符型数组的应用 • 例8-3 输入一行字符,统计其中单词的个数。  设长度是n的字符串已存储在字符数组text中,各字符元素分别为text[0]、text[1]、text[2]……text[n-1],当检测text[i](i>0)时,若满足下列条件,则必然出现新单词: text[i-1]==''&&text[i]!=''

  17. 四、字符型数组的应用 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);}

  18. 四、字符型数组的应用 • 例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的子串。

  19. 四、字符型数组的应用 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);} 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;

  20. 字符型数组及应用-小结 本单元通过7个实例介绍了一维数组和二维数组的应用知识,使用数组解决问题的一般过程总结如下: • 定义大小合适的数组。为了方便数组长度调整和程序调试,通常将数组的长度值首先定义为符号常数,然后再用于数组定义中。 • 为数组输入数据。 • 数组元素的运算处理,如排序、查找、判断统计、元素求和等。 • 输出结果。当需要对二维数组输出时,应注意每输出一行后的换行操作,使输出的结果为行列形式。 • 字符型数组具有数组的一切性质,但又有其特点,对字符型数组的操作对应有大量的操作函数,如字符串复制、连接、比较等均有专门的函数予以实现。

More Related