




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 9.1 加密问题加密问题9.2 奥运会入场次序奥运会入场次序9.3 统计数字字符个数统计数字字符个数9.4 综合应用实例综合应用实例第第9章章 字符串字符串 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 字符串:字符数组 字符指针9.1.1 程序解析9.1.2 字符串的表示9.1.3 字符串的输入输出9.1.4 字符串和字符指针9.1 9.1 加密问题加密问题 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 9.1.1 程序解析加密程序解析加密【例【例9-1】电码明文转换成密文】电码明文转换成密文。小写字母小写字母z转
2、换成转换成a,其它的小写字母转换成其它的小写字母转换成ASCII码顺序后码顺序后1位的字母,其位的字母,其它字符不变。它字符不变。分析: 用字符数组info100存放输入的字符串(结束标志是“0”),通过gets()函数输入字符串 通过循环对每一个字符进行加密 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 # include int main () char info 100; int i; printf (Input the string: ); gets(info); for(i=0; infoi!=0;i+) if(infoi=z) infoi=z; else if(infoi
3、=a&infoi=z) infoi+; printf (“After being encrypted: %sn, info); return 0;9.1.1 程序解析加密程序解析加密 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 9.1.2 9.1.2 字符串的表示字符串的表示 1.字符串常量 happypoint 用一对双引号括起来的字符序列 happy 由6个字符组成,结束标志0 ,前5个是有效字符 字符串长度:有效字符的个数h a p p y 0 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 9.1.2 9.1.2 字符串的表示字符串的表示 2. 字符数组 char
4、s6 = h , a, p , p , y ,0; char s6 = happy; char s6 = happy; 被看做一个特殊的一维字符数组,在内存中连续存放 数组的长度至少要比字符串长度大1 char s80 = happy; 只对s数组前6个元素赋值,并且不影响对字符串“ happy”的处理 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 9.1.2 9.1.2 字符串的表示字符串的表示 3.字符指针char str = China;char *ps1=str, *ps2 = Japan; 如果取得字符数组或字符串的首地址,就可以访问字符串 ps1和ps2实质上是一个指向该
5、字符串首字符的指针常量 先赋值,后引用。不要引用未赋值的指针不要引用未赋值的指针 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 9.1.3 字符串的输入和输出字符串的输入和输出 字符串的输入和输出有以下三种方法:字符串的输入和输出有以下三种方法:(1) 按单个字符输入输出字符串按单个字符输入输出字符串i = 0; while(stri = getchar( ) != n) i+; stri = 0;输入输入: scanf(“%c”,&stri); getchar(); 他们的共同特点是:系统不自动加他们的共同特点是:系统不自动加0 ;空白;空白字符字符(空格、空格、n、t等等)也作为
6、字符输入。也作为字符输入。 遇回车或空格输入结束,将输入的一串字符和 0 送入数组中 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 (1) 按单个字符输入输出字符串按单个字符输入输出字符串for(i = 0; stri != 0 ; i+) putchar(stri);输出输出: printf(“%c”,stri); putchar(); 他们的共同特点是:遇到他们的共同特点是:遇到0不结束输出、不不结束输出、不换行换行(中间的中间的0变成空格变成空格)注意:注意: 函数原型在函数原型在 stdio.h 中给出中给出 scanf和和printf一次可输入或输出多个字符;一次可输入或输
7、出多个字符; getchar和和putchar一次只能输入或输出一个字符一次只能输入或输出一个字符 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 9.1.3 字符串的输入和输出字符串的输入和输出 char str80; scanf(%s, str); printf(%s, str);注意注意: 格式符:格式符:%s 输入一个字符串时,遇到输入一个字符串时,遇到空格、空格、n、t等等结束,系统自动在输入的字符串后加上结束,系统自动在输入的字符串后加上0。 输出一个字符串时,以输出一个字符串时,以 0结束。结束。(2) 格式化输入输出字符串格式化输入输出字符串不能输入带空不能输入带空格的
8、字符串格的字符串 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 #include #define N 12int main() char nameN; printf(输入你的姓名输入你的姓名:n); scanf(%s,name); printf(Hello %sn,name); return 0;【例例9-2】从键盘输入一个人名,并把它显示在屏幕上。从键盘输入一个人名,并把它显示在屏幕上。格式化输入时,遇格式化输入时,遇空格、空格、n、t结束结束 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 9.1.3 字符串的输入和输出字符串的输入和输出 char str80; gets
9、(str); puts(str);注意注意: gets()函数中,函数中,回车转换为回车转换为0,可包含空格,可包含空格,一一次只能输入一个字串到字符数组。次只能输入一个字串到字符数组。 puts()函数中,以函数中,以 0结束,结束,并自动换行并自动换行(将将0转换成转换成n),一次只能输出,一次只能输出一个一个字串。字串。(3) 使用字符串处理函数输入输出使用字符串处理函数输入输出 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 #include #define N 12int main() char nameN; printf(输入你的姓名输入你的姓名:n); gets(name
10、); printf(Hello %sn,name); return 0;【例例9-3】从键盘输入一个带空格的人名,并把它显示从键盘输入一个带空格的人名,并把它显示在屏幕上。在屏幕上。 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 9.1.4 字符串和字符指针字符串和字符指针 数组名数组名sa、指针、指针sp和字符串和字符串 “point” 的值都是的值都是地址地址 字符数组和字符指针都可以用来处理字符串字符数组和字符指针都可以用来处理字符串char sa = array;char *sp = point;printf(“%s ”,sa);printf(“%s ”,sp);printf
11、(“%sn”, “string);array point string 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 printf(%s , sa+2); printf(%s , sp+3); printf(%sn, string+1); ray nt tring 字符串中其它字符的地址也能作为输出参数 char sa = array;char *sp = point;printf(%s , sa); printf(%s , sp); printf(%sn, string); 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 char sa = This is a string
12、;char *sp = This is a string;saT h i si sas t r i n g 0spT h i si sas t r i n g 0 改变数组sa所代表的字符串,只能改变数组元素的内容. strcpy (sa, Hello); 改变指针sp所代表的字符串,通常直接改变指针的值,让它指向新的字符串. sp = Hello;字符数组与字符指针的重要区别字符数组与字符指针的重要区别 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 定义字符指针后,如果没有对它赋值,指针的值定义字符指针后,如果没有对它赋值,指针的值不确定不确定。 char *s ;scanf(“%
13、s”, s);char *s, str20;s = str;scanf(“%s”, s);定义指针时,先将它的初值置为空定义指针时,先将它的初值置为空char *s = NULL 不要引用未赋值的指针不要引用未赋值的指针字符指针先赋值,后引用字符指针先赋值,后引用 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 字符串处理函数:函数原型在 string.h 中给出9.1.1 程序解析9.1.2 字符串数组9.1.3 字符串处理函数 字符串复制:strcpy(str1, str2) 字符串连接:strcat(str1, str2) 字符串比较:strcmp(str1, str2) 求字符
14、串长度:strlen(str)9.2 9.2 奥运会入场次序奥运会入场次序 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 9.2.1 程序解析奥运会入场次序程序解析奥运会入场次序【例【例9-4】编程实现按奥运会参赛国国名在字典中的顺】编程实现按奥运会参赛国国名在字典中的顺序对其入场次序进行排序。序对其入场次序进行排序。(设参赛国不超过设参赛国不超过200个个)。分析: 参赛国国名在字典中的顺序进行排序,实际是对参赛国国名在字典中的顺序进行排序,实际是对字符串进行排序字符串进行排序 用二维字符数组实现,每一行代表一个国家用二维字符数组实现,每一行代表一个国家 字符串的比较、复制等通过字
15、符串处理函数实现字符串的比较、复制等通过字符串处理函数实现 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 char nameNMAX_LEN,temp MAX_LEN;for(i=0; in; i+) scanf(“%s”,namei); /输入输入n个国名(字符串)个国名(字符串)for(i=0;in-1;i+) /字符串按字典排序(选择排序)字符串按字典排序(选择排序) k=i; for(j=i+1;jn;j+) if (strcmp( namej ,namek)0) strcpy(temp,namei); strcpy(namei,namek); strcpy(namek,te
16、mp); 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 一个国家的国名一个国家的国名(字符串)可以用一维字符数组表字符串)可以用一维字符数组表示,多个字符串就可以用二维字符数组来处理。示,多个字符串就可以用二维字符数组来处理。 char name20030;定义定义(可同时初始化可同时初始化),如:,如: char str410 =China,Japan,Korea,Australia;或或 char str 10 =China,Japan,Korea,Australia;9.2.2 字符串数组字符串数组 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 存储情况为:存储情况为
17、: 每行可以看成一个一维字符数组,数组名为每行可以看成一个一维字符数组,数组名为stristri ,存放一个字符串。存放一个字符串。 Str0 Str0 Str1 Str1 Str2 Str2 Str3 Str3China00Japan00Korea00Australia00 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 strcpy(char *str1, char *str2);将字符串将字符串 str2 复制到复制到 str1 中,直到遇到中,直到遇到str2中的中的0为止,连同为止,连同0一起拷贝。一起拷贝。字符串复制函数字符串复制函数strcpy()h a p p y 00
18、strcpy(str1, str2);h a p p y 0str1中strcpy(str1, “world”);str1中: w o r l d 0static char str120;static char str220 = “happy”; 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 【例【例9-5】将一个字符串复制到另一个字符串中。】将一个字符串复制到另一个字符串中。#include#includemain()char str180,str2=“China“,from10= “happy ; strcpy(str1,str2); puts(str1); strcpy(str
19、1,from); puts(str1); strcpy(str1+5,str2); puts(str1);不能直接用赋值语句对一个数组整体赋值不能直接用赋值语句对一个数组整体赋值str1= China; str2=str1; 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 strcat(char *str1, char *str2); 去掉字符串去掉字符串1后面的后面的0,连接两个字符串,连接两个字符串str1和和str2, 并将结果放入并将结果放入str1中中字符串连接函数字符串连接函数strcat 【例【例9-6】分析下面程序:将两个字符串连接成一个字】分析下面程序:将两个字符串连
20、接成一个字符串。符串。#include#includeint main()char str150=“Hello “,str2= “everyone ; strcat(str1,str2); strcat(str1,”!”); puts(str1);str1必须定义的足够大,便于必须定义的足够大,便于存入指定字符串存入指定字符串 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 strcmp(char *str1, char *str2);比较 两个字符串str1和str2的大小。规则:按字典序(ASCII码序) 如果 str1 和 str2 相等,返回 0; 如果 str1 大于 str
21、2 ,返回一个正整数; 如果 str1 小于 str2 ,返回一个负整数;字符串比较函数字符串比较函数strcmp比较规则比较规则:从第一个字符开始逐个比较直至出现不同的:从第一个字符开始逐个比较直至出现不同的字符或遇到字符或遇到0为止。如果全部相同,则两个字符串相为止。如果全部相同,则两个字符串相等;若出现不相同的字符,则以第一个不同字符的比较等;若出现不相同的字符,则以第一个不同字符的比较结果为字串比较结果。结果为字串比较结果。 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 【例【例9-79-7】输入输入5个字符串,将其中最小的字符串输出个字符串,将其中最小的字符串输出#incl
22、ude#includemain()char str10,temp10; int i; gets(temp); for(i=0;i0) strcpy(temp,str); printf(n The first string is: %s,temp); 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 strlen(char *str)计算字符串的有效长度,不包括 0。static char str20=“How are you?”strlen(hello) 的值是:strlen(str) 的值是:字符串长度函数字符串长度函数strlen612转义字符:转义字符:” 安 庆 师 范 学 院
23、计 算 机 与 信 息 学 院 字符串作为函数参数9.3.1 程序解析9.3.2 字符串作为函数参数9.3.3 返回字符串的函数9.3 9.3 统计数字字符个数统计数字字符个数 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 9.3.1 程序解析统计数字字符个数程序解析统计数字字符个数分析: 字符串的输入方法:按单个字符输入字符串的输入方法:按单个字符输入 定义定义compute()函数用于统计数字字符个函数用于统计数字字符个 compute()中形参是字符指针,调用时接收输入字中形参是字符指针,调用时接收输入字符串数组的地址符串数组的地址 通过循环,字符指针的移动来访问数组通过循环,
24、字符指针的移动来访问数组【例【例9-9】输入一行字符(少于】输入一行字符(少于80个字符),统计其中数个字符),统计其中数字字符的个数。字字符的个数。 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 #includeint main()int count,i=0; char str80; int compute(char *s); printf(输入一个字符串输入一个字符串:); while (stri=getchar()!=n) i+; stri=0; count=compute(str);printf(“count=%dn“,count);return 0;int compute(
25、char *s)/字符指针作为形参字符指针作为形参 int num=0; for(;*s!=0;s+) if(*s=0&*s=0&si=9) num+; return num; 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 9.3.2 字符串作为函数参数字符串作为函数参数9.2.2中介绍字符串的三种表示: 字符串常量、字符数组、字符指针字符串作为函数参数实参:字符串常量、指向字符数组的地址(数组名 或指针变量)形参:字符型指针(可以写成数组形式) 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 【分析】可采用逐个字符复制的方法,从下标为【分析】可采用逐个字符复制的方法,从下标
26、为0 0的字符开始的字符开始复制,直到遇到复制,直到遇到00为止。为止。#include #define N 80void MyStrcpy(char dstStr,char srcStr);int main() char aN, bN; printf(“Input a string:n); gets(a); MyStrcpy(b,a); printf(“The copy is:); puts(b); return 0;【例【例9-10】不用】不用strcpy函数,将键盘输入的字符串函数,将键盘输入的字符串a复复制到字符串制到字符串b。 安 庆 师 范 学 院 计 算 机 与 信 息 学 院
27、注意注意:复制字符串语句复制字符串语句 while(str1i=str2i)!=0)i+; 也也可以改成其他形式(字符指针),但要考虑可以改成其他形式(字符指针),但要考虑0是否是否复制,如果没有复制,需要加上。复制,如果没有复制,需要加上。void MyStrcpy(char dstStr,char srcStr) int i=0; while(srcStri)!=0) dstStri=srcStri; i+; dstStri=0; 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 9.3.3 返回字符串的函数返回字符串的函数 希望通过函数返回一个字符串,可定义一个返回指针的函数。该函
28、数被调用时,需要给字符指针类型的变量赋值。【例【例9-11】输入一个】输入一个17之间的整数,输出对应的星期名。之间的整数,输出对应的星期名。#includechar *day_name(int n)char *name=“Illegalday”,”Monday”,”Tuesday”, “Wednesday”,”Thursday”,”Friday”,”Saturday”,”Sunday”; return (n7)?:name0:namen);void main()int i; char *p; scanf(“%d”,&i); p=day_name(i); printf(“Day No.%d-%
29、sn”,i,p); 安 庆 师 范 学 院 计 算 机 与 信 息 学 院 9.4 9.4 综合应用实例综合应用实例 【例【例9-12】统计一个由】统计一个由26个字符组成的字符串中哪个字符出现的个字符组成的字符串中哪个字符出现的次数最多。次数最多。#include#includeint main()int i,sum26,max; char str1001; scanf(“%s”,str); for(i=0;i26;i+) sumi=0; for(i=0;istrlen(str);i+) sumstri-a+; /统计每个字符出现次数统计每个字符出现次数 max=0; for(i=1;isummax) max=i; printf(“%c %dn”,max+a,summax); 安 庆
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机床出租合同范本(2篇)
- 《航空制造数字孪生技术》课件-知识点1:固定副如何设置案例引入 任务2
- 《行业会计实务》课件-项目三 3.4.2工程成本的核算
- 2025合作共建物业合同书
- 2025企业设备更新借款合同
- 初中九年级数学教学设计相似图形及成比例线段
- 2025商业店铺租赁合同范本
- 2025年药品集中招标采购合同模板
- 2025茶叶采购销售合同书范本
- 2025租房合同未签订时定金应归何处
- GB/T 17622-2008带电作业用绝缘手套
- 如何拥有成长型思维课件讲义
- 焦炭单位产品能源消耗限额课件
- 上海大剧院施工质量介绍课件
- 《活着》读书分享优秀课件
- 企业中层干部领导力提升课件
- 急性腹痛诊断思路2课件
- TCAQ 10201-2020 质量管理小组活动准则培训
- 篮球三步上篮公开课教案-白元增
- 设备日常维护保养检查评分表
- 压力性尿失禁讲稿
评论
0/150
提交评论