版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、字符串,字符串,9.1 字符串常量 9.2 字符数组和字符串 9.3 字符串函数 9.4 指针与字符串 9.5 小结,9.1字符串常量,【例9.1】显示字符串常量占用的内存空间,sizeof(123); sizeof(XYtZ); sizeof(abc0def);,字符串的存储,C语言没有字符串数据类型,C语言中的字符串是以字符数组的形式来实现的。 字符数组 每个元素都是字符类型的数组 char str80;,数组的最后一个元素必须是0,【例9.2】保存字符串的数组,int main(void) char str4; /*保存字符串的数组*/ str0 = X; str1 = Y; str2
2、= Z; str3 = 0; printf(字符串: %sn, str);/*显示字符串*/ return 0; ,9.2.2字符数组的初始化,用字符型数据对数组进行初始化 char str6 = C,h,i,n,a,0; char str10 = C, H, I, N, A; 用字符串常量直接对数组初始化 char str6 = China; char str6 = China;,几点注意事项:,数组的长度必须比字符串的元素个数多1,用以存放字符串结束标志0。例如:char c5 = CHINA; /*错误*/ 用字符串初始化字符数组时,可以默认数组长度的定义,例如:char c = CHI
3、NA;/*数组大小默认为6*/ 数组名是地址常量,不能将字符串直接赋给数组名。例如:char c6; c = CHINA; /*错误*/,二维字符数组的定义和初始化,二维数组可以看成特殊的一维数组,这个特殊的一维数组的元素又是一个一维数组。,char a35=“CHN”, “KOR”, “JAN”;,二维字符数组的定义和初始化,二维数组可以看成特殊的一维数组,这个特殊的一维数组的元素又是一个一维数组。,char a35=“CHN”, “KOR”, “JAN”;,9.2.3字符数组的输入输出,单个字符的输入 / 输出 字符串的整体输入 / 输出,单个字符的输入、输出,字符输入函数getchar(
4、 ) 字符输出函数putchar( ) scanf( )/printf( ) 函数 格式符“%c”,按字符逐个输入/输出,for (i=0; stri!=0; i+) putchar(stri); putchar(n);,char str10;,单个字符的输入、输出,字符串的整体输入 / 输出,在scanf( )/printf( )函数中用格式符“%s”输入/输出字符串 对应的参数是数组名,即数组的起始地址,不能是数组元素。 char str81; /*定义字符数组*/ scanf(%s, str); /*输入字符数组*/ 注意:scanf( )函数用格式符“%s”输入时,遇空格、Tab、回车
5、符终止,并写入字符串结束标志0。,按字符串整体输入/输出,scanf(%s,str); printf(%s,str);,char str10;,gets(str); puts(str);,字符串的整体输入 / 输出,scanf(%s,str); printf(%s,str);,char str10;,gets(str); puts(str);,按字符串整体输入/输出,字符串的整体输入 / 输出,【例9.4】从键盘输入一个人名并显示在屏幕上,int main(void) char name10;/*定义字符数组*/ printf(Enter your name:); scanf(%s, name
6、);/*输入*/ printf(Hello %s!n, name);/*输出*/ return 0; ,【运行结果】 Enter your name: Zhang san Hello Zhang!,Why?,【例9.5】读取并显示字符串数组。,int main(void) int i; char str3100;/*定义二维字符数组*/ for(i = 0; i 3; i+)/*循环输入字符串*/ scanf(%s, stri); for(i = 0; i 3; i+)/*循环输出字符串*/ printf(%sn, stri); ,【例9.6】字符统计,int main(void) char
7、text80 = I have 31 BOOKS.; int i; int upper=0,lower=0,digit=0,space=0,other=0; for(i=0; texti!=0 ,9.3字符串函数,C语言提供了一系列字符串函数,包括字符串的 输入输出、连接、拷贝、比较、转换等运算。 使用这些函数需要在程序中包含相应的头文件。,9.3.1字符串输入输出函数,字符串输入函数 gets() fgets() 字符串输出函数 puts() fputs(),【例9.9】输入人名并显示- gets函数,int main(void) char name10;/*定义字符数组*/ printf(
8、Enter your name:); gets(name);/*使用gets函数输入字符串*/ printf(Hello %s!n, name);/*输出*/ return 0; ,Enter your name: Zhang San Hello Zhang San!,字符串输出函数 puts( ),#include int main(void) char str20 = Nanjing China; puts(str); return 0; ,#include ,strcpy(目的字符串,源字符串);,string copy,strlen(字符串);,string length,strcat
9、(目的字符串,源字符串);,string catenates,strcmp(字符串1,字符串2);,string comparison,9.3.3字符串处理函数,计算字符串长度,#include ,strlen(字符串);,string length,char str10 = China; printf(%d, strlen(str); 打印结果是 5,6,还是10?,计算字符串长度,#include ,strlen(字符串);,string length,len = strlen(str); for (i=0; ilen; i+) putchar(stri); putchar(n);,字符串
10、复制,#include ,strcpy(目的字符串,源字符串);,string copy,字符串能否用=整体复制? str2 = str1;,strcpy(str2, str1);,字符串复制,#include ,strcpy(目的字符串,源字符串);,string copy,字符串能否用=整体复制? str2 = str1;,strcpy(str2, str1);,【例9.12】定义一个函数实现与函数strlen( )相同的功能,int stringlength(char s ) int len = 0; while(slen != 0) len+; return len; ,while(s
11、len != 0) 等价于 while(slen),字符串连接,#include ,strcat(目的字符串,源字符串);,string catenates,strcat(str2, str1);,字符串比较,#include ,strcmp(字符串1,字符串2);,string comparison,字符串能否用,=比较大小? if (str2 = str1),if (strcmp(str2, str1) = 0),字符串比较,#include ,strcmp(字符串1,字符串2);,string comparison,字符串是如何比较大小的?,compare computer,compar
12、e computer 表示 strcmp(str1, str2) 0为真,【例9.13】strcmp函数示例,#include #include int main(void) printf(%dn, strcmp(abc, abcd); printf(%dn, strcmp(x, abcd); printf(%dn, strcmp(abcd, abcd); return 0; ,字符串转换函数,使用atoi()函数、atol()函数和atof()函数,需要包含头文件,【例9.14】字符串转换函数示例,#include #include int main(void) char str1 = 12
13、3; char str2 = 56.7; printf(str: %s after change: %dn, str1, atoi(str1); printf(str: %s after change: %fn, str2, atof(str2); return 0; ,9.3.5字符处理函数 ,【例9.15】字符统计,输入一行字符,统计其中的数字字符、小写字母、大写字母、空白字符和其它字符个数。 统计不同类型的字符个数,可以使用本节所讲的字符处理函数。,fgets(str, sizeof(str), stdin);/*输入一行字符*/ i = 0; while(stri!=0 /*准备处理下
14、一个字符*/ ,【例9.15】字符统计,【例9.17】字符串逆序,编写程序求一个字符串的逆序。 abcdefg“的逆序为 gfedcba。,【例9.17】字符串逆序,len = strlen(str); i = 0; j = len - 1; while(i j) ch = stri; stri = strj; strj = ch; i+;j-; ,9.4指针与字符串,9.4.1简单的加密器 9.4.2字符指针 9.4.3应用举例,9.4.1简单的加密器 -【问题分析】,将字符替换成ASCII码表中该字符后面的第二个字符,实际上就是将该字符的ASCII码值加上2。 依次对字符串中的每个字符进行
15、变换,就可以得到加密后的字符串。,9.4.1简单的加密器 -【核心算法】,循环的条件为: while (*p != 0) 进行字符加密可以将该字符的ASCII码值加2,表示为: *p += 2;,#define MAXLINE 80 int main() char strMAXLINE; char *p; printf(Input the string: );gets(str); p = str; while (*p != 0) *p += 2;p+; printf(After being encrypted: %sn, str); return 0; ,9.4.1简单的加密器,9.4.2字符
16、指针,通常使用两种方法对字符串进行操作。 字符数组 字符指针,字符数组,char str = Welcome!; printf(“%s”, str ); printf(“%s”, str+3); printf(“%c”, str1);,/*整体引用,输出字符串”Welcome!”*/ /*整体引用,输出字符串 “come!”*/ /*逐个引用,输出字符”e”*/,字符指针,char *s = Welcome to C; 等价于: char *s; s = Welcome to C;,字符指针,定义字符指针后,如果没有对其赋值,指针值是不确定的,即不能明确它指向的内存单元。 因此,如果引用未赋值的指针,可能会出现难以预料的结果,例如: char *s; scanf(“%s”, s); /*错误,导致难以预料的结果*/,int main(void) char a50 = Welcome to ; char b = C language!; char *pa, *pb; pa = a; pb = b; while(*pa != 0)/*A*/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 无锡市惠山区2027届数学四上期末学业水平测试模拟试题含解析
- 2027届延安市洛川县三年级数学第一学期期末达标检测试题含解析
- 2027届浪卡子县数学四上期末监测模拟试题含解析
- 二年级数学(上)计算题专项练习汇编
- 2025-2026学年湖北省高考压轴卷生物试卷含解析
- 2026生物制药研发行业现状供需分析及投资评估规划分析研究报告
- 2026中国羽毛球防护装备出口竞争力与国际贸易壁垒应对
- 2026农业industry市场供需分析及投资评估规划分析研究报告
- 2026中国认知障碍数字疗法临床验证与支付方态度
- 2026中国新生儿听力筛查设备基层推广政策支持需求调研报告
- 隧道工程施工通风系统施工
- 临沂城投集团经营分析报告
- 马克思主义与社会科学方法论概述(课件)
- LY/T 3315-2022森林立地质量评价技术规程
- GB/T 8890-2015热交换器用铜合金无缝管
- CCC认证 3C认证 3C强制
- PVC双壁波纹管技术要求
- 现浇梁支架盘扣支架计算书
- 转租合同范本电子版-转租合同 转租合同范本
- 酒店客房检查表
- 深圳技术大学辅导员招聘考试行政管理教师岗笔试面试历年真题库试卷
评论
0/150
提交评论