版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第七章第七章 字符与字符串字符与字符串ZTEZTE 中兴 软件技术软件技术回顾回顾q数组是可以在内存中连续存储多个元素的结构数组中的所有元素必须属于相同的数据类型q数组必须先声明,然后才能使用。声明一个数组只是为该数组留出内存空间,并不会为其赋任何值q数组的元素通过数组下标访问q一维数组可用一个循环动态初始化,而二维数组可用嵌套循环动态初始化q二维数组可以看作是由一维数组的嵌套而构成的ZTEZTE 中兴 软件技术软件技术目标目标q理解字符、字符数组和字符串的异同q理解字符串常量q掌握单个字符的输入输出函数:getchar() 和purchar()q掌握字符串的输入和输出函数:puts()和ge
2、ts()q熟练应用字符串操作函数:strlen()、strcpy()、strcat()、strcmp()、strlwr()和strupr()q理解二维字符串数组的初始化、输入输出ZTEZTE 中兴 软件技术软件技术单个字符的输入输出单个字符的输入输出qC语言头文件“stdio.h”中定义了两个专门用于单个字符输入输出的函数getchar()和putchar()。一、字符输入函数getchar()r作用是从输入设备(如键盘)读取一个字符。r函数getchar()没有参数,其一般形式为getchar( );r其执行结果是从输入设备得到一个字符。例如:char c;c=getchar();/从键盘输
3、入:a/则字符型变量c等于字符a。上式等价于scanf(“%c”,&c); getchar( )一次只能接收一个字符。例如scanf(“%c%c”,&c1,&c2);语句如果用getchar( )函数实现只能写成:c1=getchar( );c2=getchar( ); getchar( )可以接收回车字符。而scanf()将回车作为数据的间隔符或结束符。 getchar( )接收的字符可以不赋给任何变量。注意ZTEZTE 中兴 软件技术软件技术单个字符的输入输出单个字符的输入输出二、字符输出函数putchar()rputchar()函数作用是将一个字符输出到输出设备(
4、如显示器)。它的一般形式为putchar(字符型或整型数据); r例如:char c =A; putchar(c); 结果是输出字符变量c的值。r函数putchar()的可以输出字符型变量、整型变量、字符型常量以及控制字符和转义字符。rputchar()函数一次只能输出一个字符,printf()函数可以同时输出多个字符ZTEZTE 中兴 软件技术软件技术字符数组字符数组q 一个数组的元素是字符型,则该数组为字符数组q 字符数组的赋值可以采用三种方法:char c8=I, ,l,i,k,e, ,C;char c8; c0=I; c1= ; c2=l; c3=i; c4=k; c5=e; c6=
5、; c7=C;char c8; int i;for(i=0;i8;i+)scanf(“%c”,&ci); c0c1c2c3c4c5c6c7IlikeC1 字符数组除了在定义时初始化,只能一个元素一个元素的赋值。 字符数组中的全部内容输出,也只能一个元素一个元素的输出。 for(i=0;i8;i+)printf(“%c”,ci); 上述方式只能用于处理已知个数的字符序列,并且当字符序列发生变化时,字符数组无法伴随字符序列长度的变化而变化。c0c1c2c3c4c5c6c7IlikeCZTEZTE 中兴 软件技术软件技术字符串简介字符串简介char a=W;char b=a;char c=n
6、;char d=g;char e=L;char f=i;如何让程序存储我的姓名?Wang Lichar name15= W, a, n, g, L, i; 用若干个字符用字符数组用字符串ZTEZTE 中兴 软件技术软件技术字符串字符串q在语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串q字符数组和字符串的区别是区别是:字符串的末尾有一个空字符 0字符串可按如下方式声明并初始化:char name15= W, a, n, g, L, i, 0;char name15 = WangLi;char password = 12345678;手工加入一个空字符系统将自动加入一个空字符省略数
7、组大小,系统自动计算,大小为后面的字符总数加1,最后一个元素存入一个空字符。 0代表ASCII码为0的字符,是一个空操作符,表示什么也不干。将“I like C”放入字符串c中,内存格式为:c0c1c2c3c4c5c6c7c8IlikeC0ZTEZTE 中兴 软件技术软件技术字符串常量字符串常量q字符串常量是双引号括起的任意字符序列Hello WorldWangPingPlease enter your full name: Hello Accp字符串常量中可以包含转义序列HelloWorld0字符串结束符ZTEZTE 中兴 软件技术软件技术字符串字符串I/0函数函数3-1char name1
8、0;scanf(%s, name);printf(%s, name);格式描述串中使用转换字符串“%s”Wang LiWang0使用 scanf 时,不能输入空格Wang需要注意的是:当格式符为“%s”时,printf()和scanf()函数的地址列表是字符数组的名字,无需加地址符&。scanf(“%s”,c9); scanf(“%s”,ci); scanf(“%s”,&c);ZTEZTE 中兴 软件技术软件技术字符串字符串I/0函数函数3-2char name10;gets(name);puts(name);WangLi0Wang LiWang Li从键盘上读入一个完整的行,
9、存入字符数组name。并用空字符0取代行尾的换行符n。把字符数组中的字符串输出到显示器。使用 gets函数允许输入空格 函数puts()一次只能输出一个字符串。 函数puts()可以输出转义字符 函数puts()输出字符串后自动换行 printf()函数与puts()相比,一是可以同时输出多个字符串,二是可以灵活控制是否换行。1gets()函数同scanf()函数一样,在读入一个字符串后,系统自动在字符串后加上一个字符串结束标志0。函数gets()只能一次输入一个字符串。函数gets()可以读入包含空格和TAB的全部字符,直到遇到回车为止。2ZTEZTE 中兴 软件技术软件技术字符串字符串I/
10、0函数函数3-3puts 函数完全可以由 printf 函数取代。 当需要按一定格式输出时,通常使用 printf 函数。 printf(n 雇员姓名是: );puts(name);printf(n 雇员所属部门是: );puts(dept);printf(n 雇员姓名是:%s,name);printf(n 雇员所属部门是:%sn,dept);使用puts函数输出字符串使用printf函数输出字符串ZTEZTE 中兴 软件技术软件技术字符串示例字符串示例#include void main() char line30; int i,count = 0; printf(n 请输入一行字符:n )
11、; gets(line); i=0; while(linei != 0) if(linei = ) count+;i+; printf(“n 其中的空格总数为 %d n ,count);C is a programming language在循环执行时,扫描整个数组以统计出空格 的数量,直到遇到字符 0。每次循环执行时,都会更新计数器 i 和 count。其中的空格总数为 4ZTEZTE 中兴 软件技术软件技术字符串处理函数字符串处理函数 5-1q 与字符串有关的内置函数在头文件string.h中定义q 要使用标准库字符串处理函数,程序前应该包含: #include string.hstrle
12、nstrcpystrcmpstrcatZTEZTE 中兴 软件技术软件技术字符串处理函数字符串处理函数 5-2语法 strlen(s);描述计算字符串s中字符的个数,并将字符的个数作为函数的返回值。在计算字符个数时不计表示字符串结束的空字符0。strlen#include #include void main() char arr = Beijing; int len1, len2; len1 = strlen(arr); len2 = strlen(Shanghai); printf(n string = %s length = %d, arr, len1); printf(n string
13、 = %s length = %d n,Shanghai,len2); string = Beijing length = 7 string = Shanghai length = 8ZTEZTE 中兴 软件技术软件技术字符串处理函数字符串处理函数 5-3语法 strcpy(dest,src)描述其中,dest是目标字符串,src是源字符串。相当于把字符数组src中的字符串拷贝到字符数组dest中。结束标志0也一同拷贝。src可以是一个字符串常量。字符数组dest应足够大,以保证字符串复制不越界。strcpy#include #include void main()char source =
14、We change lives;char target20;strcpy(target,source);printf(n 源字符串 = %s, source);printf (n 目标字符串 = %sn, target); 源字符串 = We change lives 目标字符串 = We change livesq字符串能不能使用赋值语句? char str130 char str230=“I like C” str1=str2 str1,str2分别是两个数组的地址ZTEZTE 中兴 软件技术软件技术字符串处理函数字符串处理函数 5-4语法strcmp(str1, str2)描述按照ASC
15、II码顺序比较字符串str1和str2的大小,比较的结果由函数返回。在两个字符串str1和str2相同时返回0;字符串str1大于字符串str2时返回一个正值,否则就返回负值。strcmp#include #include void main()char username15,pwd15;printf(n 请输入用户名: );gets(username);printf(n 请输入密码: );gets(pwd);if(strcmp(username,John)=0) & (strcmp(pwd,123456)=0)printf(n 您已成功登录 n );elseprintf(n 用户名和
16、/或密码无效 n ); 请输入用户名: john 请输入密码: 123456 用户名和/或密码无效 请输入用户名:John 请输入密码: 123456 您已成功登录ZTEZTE 中兴 软件技术软件技术字符串处理函数字符串处理函数 5-5语法 strcat(dest, src)描述把字符串 src中的字符串连接到字符串 dest中字符串的后面。本函数返回值是字符数组dest的首地址。连接后字符串的总长度将是字符串 src 的长度加上字符串 dest的长度。目标字符串dest的大小应足够存储最终的字符串。strcat#include#includevoid main()char source_st
17、ring = is very good;char target_string30 = “VC+6.0 ;strcat(target_string,source_string);printf(n 源字符串 = %s, source_string);printf(n 目标字符串 = %sn, target_string); 源字符串 = is very good 目标字符串 = VC+6.0 is very goodZTEZTE 中兴 软件技术软件技术问题问题q输入全班同学的姓名,如何定义? 多个同学可以用 二维字符数组表示 char name230=“Jacky”,”Andy” 一个同学的姓名用
18、 一维字符数组表示 char name30=“Jacky”ZTEZTE 中兴 软件技术软件技术二维字符串数组二维字符串数组q一维字符数组中存放一个字符串, char s120=“John”q如果有多个字符串时,例如1个班级的学生的姓名,则需要用到二维字符串,如name3020可以描述30名学生的姓名(假设姓名不超过20个字符)。q如果有2个班级各30名学生,那么它们的姓名可以使用三维数组name23020。ZTEZTE 中兴 软件技术软件技术二维字符串数组二维字符串数组q二维字符串数组的初始化r二维字符串数组的初始化,可以采用二维字符数组初始化形式或者字符串初始化形式,如:char name2
19、10=J,o,h,n,0,M,a,r,r,y,0;char name210=”John”,”Marry”;char name210=”John”,”Marry”;w 二维字符串数组的赋值和引用二维字符串数组的赋值和引用w 由于二维数组可以看作是一个特殊的一维数组,它的数组元由于二维数组可以看作是一个特殊的一维数组,它的数组元素是一个一维数组。素是一个一维数组。所以二维字符串数组可以看作是这样一所以二维字符串数组可以看作是这样一个一维数组,它的元素是一个字符串个一维数组,它的元素是一个字符串。w 二维数组二维数组name210由由name0和和name1组成组成,name0代表代表字符串字符串”
20、John”、name1代表字符串代表字符串”Marry”。ZTEZTE 中兴 软件技术软件技术二维字符串数组二维字符串数组程序程序L8_9.C功能:从键盘输入三个学生姓名,并输出。功能:从键盘输入三个学生姓名,并输出。#include #include void main() char name330; int i; for (i=0;i3;i+) gets(namei); /*namei是一个一维字符数组是一个一维字符数组*/ for (i=0;i3;i+) printf(“%sn”,namei); ZTEZTE 中兴 软件技术软件技术/*- 程序: 输入一行字符,统计其中单词的个数。约定单
21、词之间以空格分隔。 -*/ #include void main( ) char string100; int i ,num=0,letter=0; /*letter为0时记录前一状态为空格状态,letter为1时前一状态为字符状态*/ gets(string); for (i=0;stringi!=0;i+) if(stringi= &letter=1) letter=0; if(stringi!= &letter=0) letter=1; num+; printf(There are %d words.n,num); ZTEZTE 中兴 软件技术软件技术分析分析当前字符Iamaboy是否空格YNYNNYNYNNNLetter原值00101101011新单词开始否?NYNYNNYNYNNLetter新值01011010111Num值01122233444ZTEZTE 中兴 软件技术软件技术/* 程序 : 有3个英文字符组成的字符串,要求按照英文字母顺序输出。*/ #include #include void m
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- QC/T 1206.5-2026电动汽车动力蓄电池热管理系统第5部分:直冷直热系统
- 2026事业单位工勤技能-江西-江西有线广播电视机务员四级(中级工)历年参考题库含答案详解3套试卷
- 颅脑损伤后遗症的护理
- 兴仁县中医院绩效方案
- 高血压的健康教育宣传
- 医院运营管理体系升级与核心指标提升年度总结(2篇)
- 心包疾病诊疗进展 课件
- AI女友体验测评
- 潍柴工程就业前景指南
- 非师范专业就业分析
- 东方枢纽集团笔试题答案
- k近邻算法课件
- 中国平安IQ测评题库
- 食物与能量的转换
- 中级护士聘任申请书范文
- 2025年大学《精神医学-儿童少年精神病学》考试参考题库及答案解析
- 2025年北森人才综合测评试题及答案
- 食堂安全消防培训
- 中止施工期间安全保障措施方案
- 煤粉管道测厚施工方案
- 初中物理八年级上册专题突破讲义(人教版)专题01 机械运动计算题分析(原卷版)
评论
0/150
提交评论