数组-3(字符数组与字符串).ppt_第1页
数组-3(字符数组与字符串).ppt_第2页
数组-3(字符数组与字符串).ppt_第3页
数组-3(字符数组与字符串).ppt_第4页
数组-3(字符数组与字符串).ppt_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

字符数组与字符串,字符串(String)与字符数组,字符串 一串以0结尾的字符在C语言中被看作字符串 用双引号括起的一串字符是字符串常量,C语言自动为其添加0终结符 C语言并没有为字符串提供任何专门的表示法,完全使用字符数组和字符指针来处理 字符数组 每个元素都是字符类型的数组 char string80;,只能逐个对数组元素进行操作(字符数组例外),输入方法:,int a10,i;,输入第i个数组元素:,scanf(“%d“,输入整个数组元素:,for (i=0;i10;i+) scanf(“%d“,输出方法:,输出第i个数组元素:,printf(“%d“,ai);,输出整个数组元素:,for (i=0;i10;i+) printf(“%d“,ai);,一维数组的输入和输出,字符数组的初始化,用字符型数据对数组进行初始化 char str6 = C,h,i,n,a,0; 用字符串常量直接对数组初始化 char str6 = “China“; char str6 = “China“; char str = “China“;,逐个输入输出,for(i=0;si!=0;i+) si=getchar(); /scanf(“%c”,scanf(“%s“,s); printf(“%s“,s);,char s10;,字符数组的输入输出,gets(“%s“,s); puts(“%s“,s);,一次性输入输出,#include void main() char a15,b5,c5; scanf(“%s%s%s“,a,b,c); printf(“a=%snb=%snc=%sn“,a,b,c); scanf(“%s“,a); printf(“a=%sn“,a); ,运行情况: 输入:How are you? 输出:a=How b=are c=you? 输入:How are you? 输出:a=How,scanf中%s输入时,遇空格或回车结束,运行情况: 输入:How are you?,例子:,scanf(),char str10; scanf(“%s“, str); 不能读入带空格的字符串,gets()可以. 这种用法很不安全。当用户的输入多于10个(含10个),str数组将越界. scanf被公认为最易遭到黑客攻击的函数之一,字符串处理函数,字符串输出函数puts 格式:puts(字符数组) 功能:向显示器输出字符串(输出完,换行) 说明:字符数组必须以0结束,字符串输入函数gets 格式:gets(字符数组) 功能:从键盘输入一以回车结束的字符串放入字符数组中, 并自动加0 说明:输入串长度应小于字符数组维数,例 #include #include void main( ) char string80; printf(“Input a string:”); gets(string); puts(string); 输入: How are you? 输出: How are you ?,gets(),字符串输入函数gets()也没有提供限制输入字符串长度的方法,容易引起缓冲区溢出,给黑客攻击以可乘之机 对输入字符串长度有限制的函数调用 fgets(buf, sizeof (buf), stdin);,字符串处理函数,puts 输出字符串 gets 输入字符串 (#include) strcat 字符串连接 strcpy 字符串复制 strcmp 字符串比较 strlen 字符串长度 strlwr 将字符串中的大写字符转换为小写字符 strupr 将字符串中的小写字符转换为大写字符 (#include),字符串连接函数strcat 格式:strcat(字符数组1,字符数组2) 功能:把字符数组2连到字符数组1后面 返值:返回字符数组1的首地址 说明:字符数组1必须足够大 连接前,两串均以0结束;连接后,串1的0取消, 新串最后加0,例 char str120 =“Hello ”; char str220=“Li Hua”; str1: str2:,Strcat(str1,str2),字符串拷贝函数strcpy 格式:strcpy(字符数组1,字符串2) 功能:将字符串2,拷贝到字符数组1中去 返值:返回字符数组1的首地址 说明:字符数组1必须足够大 拷贝时0一同拷贝 不能使用赋值语句为一个字符数组赋值,例 char str120 =“Hello!”; char str220; str2=str1; () strcpy(str2,str1); (),字符串比较函数strcmp 格式:strcmp(字符串1,字符串2) 功能:比较两个字符串 比较规则:对两串从左向右逐个字符比较(ASCII码), 直到遇到不同字符或0为止 返值:返回int型整数,a. 若字符串1 字符串2, 返回正整数 c. 若字符串1= 字符串2, 返回零 说明:字符串比较不能用“=”,必须用strcmp。,0作为字符串结束符的天生缺陷,假若一些字符串处理函数的字符串没有0会如何?,例 void main( ) char a5=H,e,l,l,o; printf(“%s”,a); ,例 void main( ) char a =“Hello”; printf(“%s”,a); ,结果:Hello#-=*,结果:Hello,用“%s”输出时,遇0结束,0作为字符串结束符的天生缺陷,0很关键,如果没有,那么这些处理函数会一直进行处理直到遇到一个0为止。此时可能已经把内存弄得乱七八糟。 ANSI C定义了一些“n族”字符处理函数,包括strncpy、strncat、strncmp等,通过增加一个参数来限制处理的最大长度 char *strncpy(char *dest, const char *src, unsigned int count); strncat 字符串连接 strncpy 字符串复制 strncmp 字符串比较,例:,从键盘任意输入5个学生的姓名,编程找出并输出按字典顺序排在最前面的学生姓名 等价于求最小字符串,#include #include #define ARRA_SIZE 80 void main() int n, num; char strARRA_SIZE, minARRA_SIZE; printf(“Please enter five names:n“); gets(str); strcpy(min, str); for (n=1; n5; n+) gets(str); if (strcmp(str, min) 0) strcpy(min, str); printf(“The min is:“); puts(min); ,存学生姓名字符数组,字符串长度函数strlen 格式:strlen(字符数组) 功能:计算字符串长度 返值:返回字符串实际长度,不包括0在内,例 对于以下字符串,strlen(s)的值为: (1)char s10=A,0,B,C,0,D; (2)char s =“tv0willn”; (3)char s =“x69”;,答案:1 3 1,char a=“china“; printf(“ %s %s “,strupr(a),strlwr(“COMPUTER“);,输出:CHINA computer,例1: 输入一行字符,统计其中有多少个单词,程序举例,算法分析: 单词的数目是由空格出现的次数决定的,应检测每一个字符是否为空格。,当前字符=空格,Word初值=0,程序举例,例2 有三个字符串,找出其中最大者(P167 例6.9 自学),设:一个二维字符数组str,大小为320,即每一行能够容纳20个字符。,算法分析:把str0、str1、str2看作3个一维数组,用gets()函数分别读入3个字符串,经过两次串比较,得到最大者。,例2 有三个字符串,找出其中最大者,#include #include main() char string20,str320; int i; for(i=0;i0) strcpy(string,str0); else strcpy(string,str1); if(strcmp(str2,string)0) strcpy(string,str2); printf(“nThe largest string is:n%sn“,string); ,课堂练习1:数组编程练习 餐饮服务质量调查打分,有40个学生被邀请给自助餐厅的食品和服务质量打分(110等级),统计调查结果,并用*打印如下形式的统计结果直方图 Grade Count Histogram 1 5 * 2 10 * 3 7 * .,提示 定义数组score存放打的分数 定义数组count为计数器(co

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论