《字符型数组及应用ppt课件》由会员分享,可在线阅读,更多相关《字符型数组及应用ppt课件(13页珍藏版)》请在金锄头文库上搜索。
1、第第9 9讲字符型数字符型数组及运用及运用计算机与通算机与通讯工程学院工程学院第第9 9讲 字符型数字符型数组及运用及运用 本本讲主要内容主要内容一、字符数一、字符数组的定的定义及初始化及初始化 二、字符串二、字符串输入入输出操作出操作三、常用的字符串操作函数三、常用的字符串操作函数四、字符型数四、字符型数组的运用的运用学学习目的与要求:目的与要求: 掌握字符数掌握字符数组的定的定义、初始化及其运用方法;、初始化及其运用方法; 熟熟习常用的字符串操作函数;常用的字符串操作函数; 了解字符数了解字符数组和字符串的存和字符串的存储方式;方式; 掌握一掌握一维字符数字符数组编程方法。程方法。 学学习
2、重点:字符数重点:字符数组的定的定义、初始化及其运用方法;、初始化及其运用方法; 字符串字符串处置函数。置函数。学学习难点:字符串点:字符串处置函数及字符串的置函数及字符串的输入和入和输出格式出格式 一、字符数一、字符数组的定的定义、初始化、初始化 字符型数字符型数组是数据是数据类型型为字符型的数字符型的数组,用于存放字,用于存放字符数据,每一个数符数据,每一个数组元素存放一个字符。元素存放一个字符。定定义格式:格式: char char 数数组名名 数数组长度度 例如:例如: char array10; char array10;1. 字符数字符数组的定的定义2. 字符数字符数组的初始化的初
3、始化 字符数字符数组初始化初始化时,通常运用,通常运用0作作为末尾元素末尾元素值。 例如:例如:char string8=e,x,a,m,p,l,e,0; 可以运用一个字符串常量可以运用一个字符串常量为字符数字符数组赋初初值。 例如:例如:char string8=example; 初始化初始化时,可以省略,可以省略对数数组长度的度的阐明。明。 例如:例如:char string =example;但字符数但字符数组并不要求其最后一个元素一定是并不要求其最后一个元素一定是00。前往二、字符串二、字符串输入入输出操作出操作1. 用用“%c格式符格式符输入入输出字符串出字符串2. 用用“%s格式符
4、格式符输入入输出字符串出字符串4. 输出字符串函数出字符串函数puts()3. 输入字符串函数入字符串函数gets()char s20;for(i=0;i20;i+) scanf(%c,&si);例例7-3char c6;scanf(%s,c);printf(%s,c);数数组名代表名代表该数数组的起始地址。的起始地址。对于一于一维字符型数字符型数组,运用,运用数数组名名经过“%s格式,可以一次将整个数格式,可以一次将整个数组输入或入或输出。出。对于数于数值型数型数组,只能逐个运用数,只能逐个运用数组元素,而不能一次运用整个数元素,而不能一次运用整个数组。用用“%s格式格式输出出时,假,假设数
5、数组中包含一个以上中包含一个以上0,遇第一个,遇第一个0时终了。了。例如:例如:char country20 = C,h,i,n,a,0,J,a,p,a,n,0; printf(%s, country); 用一个用一个scanf()函数函数输入多个字符串入多个字符串时,输入的各字符串之入的各字符串之间要以要以“空格空格键分隔。分隔。例如:例如:char str15,str25,str35; scanf(%s%s%s,str1,str2,str3);输入数据:入数据:How are you? 运用运用scanf函数的函数的“%s格式,格式,不能不能输入入带空格的字符串。空格的字符串。格式:格式:
6、gets(字符数字符数组名名)功能:从功能:从键盘输入一个字符串,并存入一个字符串,并存储在指定数在指定数组中。中。例如:例如:char str12; gets(str);格式:格式:puts(字符数字符数组名名)功能:功能:输出存出存储在字符数在字符数组中的字符串。中的字符串。puts(str);前往main() char s20; int i,number=0,other=0; printf(Input a string: ); for(i=0;i20;i+) scanf(%c,&si); for(i=0;i20;i+) switch(si) case 0: case 1: case 2:
7、 case 3: case 4: case 5: case 6: case 7: case 8: case 9: number+;break; default: other+; printf(number: %d, other: %dn,number,other);例例7-3 输入入20个字符,分个字符,分别统计其中的数其中的数字个数和其他字个数和其他字符的个数。字符的个数。用用“%c“%c格式符格式符输入字符串入字符串前往三、常用的字符串操作函数三、常用的字符串操作函数功能:把字符串功能:把字符串s2衔接到字符串接到字符串s1的后面。其中,的后面。其中,s1、s2既可以是字既可以是字符数符数
8、组名,也可以是字符串常量。名,也可以是字符串常量。1. 衔接字符串函数接字符串函数strcat()格式:格式:strcat(s1,s2)例例7-5功能:把字符串功能:把字符串s2复制到字符数复制到字符数组s1中。中。阐明:明:s1只能是字符数只能是字符数组名或字符数名或字符数组的开的开场地址;地址;s2可以是数可以是数组名,也可以是一个字符串。名,也可以是一个字符串。2. 复制字符串函数复制字符串函数strcpy()格式:格式:strcpy(s1,s2)功能:比功能:比较字符串字符串s1s1和字符串和字符串s2s2的大小。的大小。s1s1与与s2s2一一样时,strcmp(s1,s2)strc
9、mp(s1,s2)的的值为0 0;s1s1大于大于s2s2时,strcmp(s1,s2)strcmp(s1,s2)的的值为一个一个正数;正数;s1s1小于小于s2s2时,strcmp(s1,s2)strcmp(s1,s2)的的值为一个一个负数。数。比比较的方法是的方法是对两个字符串自左至右逐个字符比两个字符串自左至右逐个字符比较,直到遇到不同字,直到遇到不同字符或符或00时比比较过程程终了,此了,此时,ASCIIASCII码值大的字符所在的字符串大的字符所在的字符串大。大。 3. 字符串比字符串比较函数函数strcmp()格式:格式:strcmp(s1,s2)例例7-6例例7-7前往main(
10、) char c110=China,c210= man; strcat(c1,c2); printf(String c1: ); puts(c1); /* 输出字符串出字符串c1 */ printf(String c2: ); puts(c2); /* 输出字符串出字符串c2 */例例7-5 字符串衔接字符串衔接前往/* 程序程序e706.c */#includestdio.hmain() char c120=program,c210=example; strcpy(c1,c2); printf(String c1: ); puts(c1); printf(String c2: ); puts
11、(c2); 例例7-6 字符串复制字符串复制前往前往#include stdio.h#define N 3main() int count=1; char word12; while(count+N+1) /* 对终了循了循环的情况的情况进展判展判别*/ printf(Sorry!n); else printf(Continue,please!n); 例例7-7 运用运用strcmp()函数函数设计一个密一个密码验证程序。程序。四、字符型数四、字符型数组的运用的运用例例8-3 8-3 输入一行字符,入一行字符,统计其中其中单词的个数。的个数。例例8-4 8-4 判判别s2s2能否是能否是s1s
12、1的子串。的子串。前往main() char text100; int word,i; gets(text); if(text0= )word=0; else if(text0!=0)word=1; i=1; while(texti!=0) if(texti-1= &texti!= )word+; i+; printf(word=%dn,word);设长度是度是n的字符串已存的字符串已存储在字在字符数符数组text中,各字符元素分中,各字符元素分别为text0、text1、text2、 、textn-1,当,当检测texti (i0)时,假,假设满足以下条件,足以下条件,那么必然出那么必然出现
13、新新单词:texti-1= &texti!= 例例8-3 输入一行字符,统输入一行字符,统计其中单词的个数。计其中单词的个数。前往main( )char s180,s280; int i=0, j, k, k1, k2, flag; gets(s1); gets(s2); k1=strlen(s1); k2=strlen(s2); flag=0; while(ik1-k2+1&!flag) j=0; k=i; while(s2j&s1k=s2j) j+; k+; if (s2j=0) flag=1; break; i+; if(flag=1) printf (%s is in %s.n,s2,
14、s1); else printf (%s is not in %s.n,s2,s1);根本思根本思绪:从:从s1字符串的第一字符串的第一个字符开个字符开场,依次与,依次与s2字字符串的各字符比符串的各字符比较,假,假设均一均一样,那么,那么s2是是s1的子的子串;否那么再从串;否那么再从s1的下一的下一个字符第个字符第2个字符开个字符开场,依次与依次与s2字符串的各字符字符串的各字符比比较,。设k1,k2分分别表示表示s1串和串和s2串的串的长度,度,那么最后一次那么最后一次应从从s1的第的第k1-k2+1个字符开个字符开场即即s1k1-k2,依次与,依次与s2字字符串的各字符比符串的各字符比
15、较,假,假设存在不同字符,那么存在不同字符,那么s2一一定不是定不是s1的子串。的子串。例8-4 判别s2能否是s1的子串。前往字符型数组及运用字符型数组及运用- -小结小结本本单单元元经过经过7 7个个实实例引例引见见了一了一维维数数组组和二和二维维数数组组的运用知的运用知识识,运用数,运用数组组处处理理问题问题的普的普经过经过程程总结总结如下:如下:定定义义大小适宜的数大小适宜的数组组。为为了方便数了方便数组长组长度度调调整和程序整和程序调试调试,通常将数,通常将数组组的的长长度度值值首先定首先定义为义为符号常数,然后再用于数符号常数,然后再用于数组组定定义义中。中。为为数数组输组输入数据。入数据。数数组组元素的运算元素的运算处处置,如排序、置,如排序、查查找、判找、判别统计别统计、元素求和等。、元素求和等。输输出出结结果。当需求果。当需求对对二二维维数数组输组输出出时时,应应留意每留意每输输出一行后的出一行后的换换行操行操作,使作,使输输出的出的结结果果为为行列方式。行列方式。字符型数字符型数组组具有数具有数组组的一切性的一切性质质,但又有其特点,但又有其特点,对对字符型数字符型数组组的操的操作作对应对应有大量的操作函数,如字符串复制、有大量的操作函数,如字符串复制、衔衔接、比接、比较较等均有等均有专门专门的函数予以的函数予以实现实现。 作业:教材7.6 8.4