1 / 36

第八章 字符数据处理

第八章 字符数据处理. 第八章 字符数据处理. 第一节 字符与字符串 第二节 字符数组 第三节 字符串处理函数 第四节 二维字符数组 第五节 应用实例. §8–1 字符与字符串. 一、 C 中的字符数据. ‘ a’,’A’ ‘<br>’,‘t’. 字符 常量 字符 变量 字符 串常量. char c;. 字符数据. “ Turbo C”. 二、字符数据的输入和输出. char c,d; scanf(“%c”,&amp;c); d=getchar();. char c=‘a’,d=‘b’; printf(“%c”,c);

daria
Télécharger la présentation

第八章 字符数据处理

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. 第八章 字符数据处理

  2. 第八章 字符数据处理 第一节 字符与字符串 第二节 字符数组 第三节 字符串处理函数 第四节 二维字符数组 第五节 应用实例

  3. §8–1 字符与字符串 一、C中的字符数据 ‘a’,’A’ ‘\n’,‘\t’ 字符常量 字符变量 字符串常量 char c; 字符数据 “Turbo C” 二、字符数据的输入和输出 char c,d; scanf(“%c”,&c); d=getchar(); char c=‘a’,d=‘b’; printf(“%c”,c); putchar(d);

  4. §8–2 字符数组 一、 数组中的各个元素均为字符变量 字符串 二 、每个元素只能存放一个字符 例:char c[20]={‘a’,’b’,’c’,…..}; c[0]=‘a’,c[1]=‘b’,….最后一个元素:c[19] 其中字符的个数不得多于20 用字符数组可以存放长度不同的字符串 串:用双引号”“括起来的字符或转义符序列 串长:字符串中所包含的字符数 串结束标记:C中的串以’\0’结束。 ’\0’称为串结束标记。

  5. §8–2 字符数组 字符串在数组中的存储格式 字符串在字符数组中一个字符占用一个字节。字符串实际占有的存储单元数量等于字符串长度+1。 要定义一个存放字符串"CHINA"的字符数组c,应定义为:char c[6]; ‘\0’是在字符串存入字符数组时由系统自动填加的,并不是字符串本身的一部分,在计算串长的时候不包括’\0’ 。 数组c在内存中 实际存放情况 • ┏━━┳━━┳━━┳━━┳━━┳━━┓ • ┃ C ┃ H ┃ I ┃ N ┃ A ┃ \0 ┃ 串长=5 • ┗━━┻━━┻━━┻━━┻━━┻━━┛ • c[0] c[1] c[2] c[3] c[4] c[5]

  6. §8–2 字符数组 三 、字符数组的初始化 1 。为每一个元素赋初值 char c[6]={‘a’,’b’,’c’,’d’,’e’,’f’}; 2 .C中可以使用字符串常量为字符数组初始化, char ch[6]={"CHINA"}; char ch[6]=“CHINA”; /* 省略 { } */ char ch[] ="CHINA"; /* 省略说明中字符串长度值 */

  7. §8–2 字符数组 四、关于字符数组的几点说明: 1 字符串在内存中,系统自动加上‘\0’,作为字符串结束标记,字符串所占字节数为串中字符个数+1 char c[6]=“abcde”; 该串共占6个字节 2 程序中系统根据‘\0’来判断字符串是否结束,而不是通过数组长度。 char c[6]=“ab”;

  8. §8–2 字符数组 3 可以 用字符串常量为数组初始化 这四种初始化是否等价? 判断: (1) char c[10]={“abcde”}; (2) char c[10]={‘a’,’b’,’c’,’d’,’e’}; (3) char c[10]=“abcde”; (4) char c[10]={‘a’,’b’,’c’,’d’,’e’,’\0’}; 结论 (1)=(3)=(4) C语言并不要求所有的字符数组的最后一个元素必须是‘\0’(如果使用串,系统自动加上)

  9. §8–2 字符数组 五 、字符数组的输入输出 int a[10],i; for(i=0,i<10;i++) { scanf(“%d”,&a[i]); printf(“%d,”,a[i]);} 基本数据类型中所有的数组都可以通过循环语句,逐一赋值 字符数组除采用此方法之外,还有其他方式 输入 是否循环? 是否自动换行? 是否用数组名? 是否用取址符? 字符串 %s 输出 只能是字符型

  10. §8–2 字符数组 1 字符数组的输入 介绍三种方法: (1)用scanf函数 ,用循环结构,逐一输入元素的值,元素前用取址符&,格式为%c char c[10];int i; for(i=0;i<10;i++) scanf(“%c”,&c[i]); (2) 用scanf函数,整串输入,不用取址符,只写数组名,格式为%s 数组名 char c[10]; scanf(“%s”, c ); 任何数组的数组名代表了数组在存储空间中的起始地址 注意:遇回车,空格输入结束

  11. §8–2 字符数组 (3) 用gets( )函数,一次输入一个整串, 遇回车结束 char str[10]; gets( str ); 任何数组的数组名代表了数组在存储空间中的起始地址 数组名 scanf, %c 循环 &c[i] scanf, %s 数组名 空格,回车结束 gets( )数组名,回车结束 总结:

  12. §8–2 字符数组 2 字符数组的输出 介绍三种方法: char c[10];int i; (假定已有值) …... for(i=0;i<10;i++) printf(“%c”,c[i]); (1)用printf 函数,循环结构,逐一元素输出,格式为%c (2) 用printf函数,格式为%s ,用数组名,整串输出 char c[10]=“abcdef”; printf(“%s\n”,c); 不自动换行 (3)用puts( )函数,一次输出整串 char str[10]=“abcde”; puts( str ); 自动换行 数组名

  13. §8–2 字符数组 说明: *字符数组可以按字符串输出,输出时,遇‘\0’结束 *字符数组中,若有多个‘\0’, 遇到第一个‘\0’,输出结束 Char str[10]={‘a’,’b’,’e’,’\0’,’s’,’r’,’\0’}; puts(str); abe printf, %c 循环 c[i] printf, %s 数组名 不自动换行 puts( )数组名 自动换行 总结:

  14. main() { int i;char str[13]; printf(“1:scanf & printf %%c:\n”); for (i=0;i<13;i++) scanf(“%c”,&stri]); for (i=0;i<13;i++) printf(“%c”,str[i ]); printf(“\n”); printf(“2:scanf & printf %%s:\n”); scanf(“%s”,str); printf(“%s”,str);printf(“\n”); printf(“3:gets & puts :\n”); gets(str); puts(str); } §6–3 字符数组(续) 三次输入: computer & C 整串输入输出

  15. §8–3 字符串处理函数 #include<string.h> C的库函数中提供了有关字符串输入,输出,字符串复制,字符串连接,字符串比较,求字符串长度,字母大小写转换等函数 所有的函数在使用时,程序开始加文件包含: #include<string.h> 字符数组名 1 字符数组输出 格式:puts(字符数组) 功能:从终端输出指定字符数组 char str[ ]=“Turbo C”; puts(str); 自动换行

  16. §8–3 字符串处理函数 char str[80]; gets(str); puts(str); 2 字符数组输入 格式:gets(字符数组) 功能:从输入设备上输入一个字符串, 遇回车结束 可以是字符数组, 也可以字符串常量 3 字符串连接 格式:strcat(字符数组1,字符数组2) 功能:将字符数组2连接到字符数组1的后面 char c1[10]=“abc”; strcat(c1,”efg”);puts(c1); abcefg

  17. §8–3 字符串处理函数 要求 * 字符数组1长度必须能够容纳两个串的长度 * 连接时自动取消数组1后面的‘\0’ 下面程序的运行结果是 #include<string.h> main() { char a[80]=“AB”, b[80]=“LMNP”; int i=0; strcat(a,b); while (a[i++]!=‘\0’) b[i]=a[i]; puts(b); } A) LB B) ABLMNP C) AB D) LBLMNP

  18. a b c d e \0 L M N \0 L M N \0 §8–3 字符串处理函数 4 字符串拷贝 格式:strcpy(字符数组1,字符数组2) 功能:将字符数组2复制给字符数组1 c1 c1 char c1[20]=“abcde”,c2=“LMN”; strcpy(c1,c2); 或: strcpy(c1,”LMN”); puts(c1); 显示LMN c2

  19. §8–3 字符串处理函数 说 明 (1)字符串不能彼此赋值 ,只能用拷贝函数 (2)字符数组1定义的长度必须比字符数组2大(或相等) (3) 字符数组2可以用字符串常量,字符数组1必须写成变量名 (4) 连同‘\0’一起复制 (5) 可以复制部分字符,即 char c1[20],c2[ ]=“Trubo C”; strcpy(c1,c2,4);只复制前4个字符 (6) 如果原数组1中有字符,则复制后将原有内容覆盖(没覆盖的部分保留,但不显示)

  20. §8–3 字符串处理函数 C语言中的数据赋值 1.整型数据:int a,b=5; a=b; 2.实型数据: float x,y=0.5; x=y; 3.字符型数据:char c1,c2=‘A’; c1=c2; 4.字符数组:char str1[10]={“abcde”}; char str2[10]; strcpy(str2,str1); 赋值 字符串拷贝

  21. §8–3 字符串处理函数 char a[7]=“abcdef”,b[4]=“ABC”; strcpy(a,b); printf(“%c”,a[5]); A) 空格B) \0 C) e D) f 如果数组1>数组2 函数值为正 如果数组1<数组2 函数值为负 如果数组1==数组2 函数值为0 5 字符串比较 格式:strcmp(字符数组1,字符数组2) 功能:从左到右逐一比较数组1和数组2各字符的ASCII 值,若相同,继续,若不同,返回一个整数(以第一个不相同的字符比较为准)

  22. §8–3 字符串处理函数 C语言中的数据比较 1.整型数据:int a,b if(a==b) 2.实型数据: float x,y if(abs(x-y)<1e-5) 3.字符型数据:char c1,c2 if(c1==c2) 4.字符串:char str1[10],str2[10] if(strcmp(str1,str2)==0) 绝对值 记! 两个字符串怎样交换?

  23. b a s i c \0 e p f p p f o n a r r o d o s r o r t g \0 c t g r r r r a a l a a a n m \0 n m \0 \0 \0 \0 开始c1[8],c2[8] 例题:从键盘输入五个字符不多于7个的字符串,输出其中最大的。 输入一个串c1 c1[8] N i<4? Y c2[8] 输出c1 输入一个串c2 N c1小? Y C1数组中存放 当前最大的串 program 字符串拷贝

  24. 开始c1[8],c2[8] 输入一个串c1 N I<4? Y 输出c1 输入一个串c2 N c1小? Y 字符串拷贝 #include<string.h> main( ) { char c1[8],c2[8]; int i; printf(”Input c1: ”); gets(c1); for (i=0;i<4;i++) { printf (”Input c2: ”); gets(c2); if ( strcmp(c1,c2)<0) strcpy(c1,c2); } printf (”The result is : ”); printf (”%s”,c1); } 运行

  25. CAD/CAPP/CAM 设计 制造 int IT; float Ra; 工艺设计 登录(密码检查) 加工精 度IT=7 输入IT,Ra,…... 加工方法、 机床、刀具、 夹具…... 搜索加工知识库 表面粗糙 度Ra=1.6 输出加工方法、设备等

  26. §8–3 字符串处理函数  怎样交换两个字符数组?  怎样将五个字符串排序输出?  怎样将100本英文书名做字典排序? 冒泡排序

  27. §8–3 字符串处理函数 6 求字符数组(串)的长度 不包含字符串结束标记‘\0’ 格式:strlen(字符数组) 功能:测试字符数组中所含字符的个数 转义字符 char str[10]=“Trobu C”; printf(“%d”,strlen(str)); 结果: 7 结束 3 char str[ ]=“\t\v\\\0will\n”; printf(“%d”,strlen(str)); ?

  28. §8–3 字符串处理函数 7 字符串字母大小写转换 单向的转换,不是对换 格式:strlwr(字符数组) 功能:将数组中的大写字母转换成小写 格式:strupr(字符数组) 功能:将数组中的小写字母转换成大写 char str=“Turbo C”; printf(“%s”,strupr(str)); printf(“%s”,strlwr(str)); TURBO C turbo c

  29. §8–4 二维字符数组 一、二维数组中的元素均为字符型数据 二、定义: char str[3][10]; 字符串 三、初始化方式: char str[3][10]={“abc”,”efg”,”12345”}; 四、引用: f 1。printf(“%c”,str[1][1]); 2。printf(“%s”,str[1]); efg 2345 3。printf(“%s”,&str[2][1]);

  30. §8–5 数组的应用 有一篇文章,共三行文字,每行有80个字符,要求统计出其中英文大写字母,小写字母,数字,空格,以及其他字符的个数 三行 80个字符 题目 分析 按行输入字符(用哪个函数?循环几次?) 对第 i行的每一列(每个字符)进行判断,是否为大写,小写,数字,空格或其他 (循环几次?) i 定义二维字符数组 char text[3][80] 循环嵌套,外层循环对行共3次,内层循环对列共80次,且遇‘\0’终止 对二维数组中的每一个元素text[i][j]进行判断

  31. for( i=0;i<3;i++) 输入文章的第 i 行 N-S图: for(j=0;j<80&&text[I][j]!=‘\0’;j++) ‘A’~’Z’ T F ‘a’~’z’ F T 大写字母数加1 小写字母数加1 ‘0’~’9’ T F 数字个数加 1 ‘ ‘ F T 空格数加 1 “其他”个数加 1 输出大写字母,小写字母,数字,空格和“其他”的个数

  32. §8–5 数组的应用 • 求字符串的长度 #include <stdio.h> main ( ) { int length=0 ; char line[100]; gets(line); while( line[length] != '\0' ) length ++; printf (“String length=%d”, length); } 根据字符串中‘\0’的位 置来计算字符串长度。

  33. §8–5 数组的应用 将字符串str1拷贝到串str2中。 • 字符串复制。 #include <stdio.h> main ( ) { char str1[100], str2[100]; int i; printf ("Enter string 1:"); gets (str1); for (i=0; (str2[i]=str1[i])!='\0'; i++) ; printf("Output string 2:%s\n", str2); } 根据字符串中‘\0’的位 置来复制字符串。

  34. 第八章 总结 一 数组的三要素:类型,数组名,长度 二 数组的初始化方法(字符数组的特殊性) int a[ ]={ 1,2,3,4,5,6}; int a[6]={ 1,2,4}; char c[6]={ ‘a’,’b’,’c’,’d’,’e’}; char c[6]=“abcde”; char c[ ]={ “abcde”}; char c[ 6]={‘a’,’b’,’c’,’d’,’e’,’\0’}; int a[ ][3]={1,2,3,4,5,6}; int a[2][3]={ {2,3},{0,4,5}}; char str[3][10]={“aaa”,”bbb”,”ccccc”};

  35. 第八章 总结 四 数组元素的引用,下标从0开始 五 字符数组的输入和输出 * 字符数组可以整串操作 %s * 数组名代表数组元素的起始地址 * 字符串一定是以 ‘\0’结尾 六 字符串处理函数 Strcat 连接 (将某串接在一字符数组之后) strcpy 复制(字符串不允许赋值,只能将某串 复制给一个字符数组) strcmp 比较 (判断两串是否相等)常用于字符串按ASCII顺序排序的操作

  36. 第八章 总结 strlen 求字符串中有效字符的个数(含中间的空格,但不含结束标记‘\0’) 输入:char str[10] scanf %c &str[I] 循环输入 scanf %s str 接受空格,回车前的字符 gets(str) 接受回车前的字符 输出:printf %c str[I] 循环输出 printf %s str 整串,不换行 puts (str) 整串,自动换行 * 转义字符在字符串常量中 * 二维数组按行存储 注意

More Related