




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C C语言程序设计教程语言程序设计教程编写组编写组20072007年年3 3月月课件制作:张课件制作:张 华华2简介简介字符串与字符数组字符串与字符数组在在C语言中,字符串是存储在字符数组中并用空字符语言中,字符串是存储在字符数组中并用空字符(0)结束的字符序列。)结束的字符序列。字符串字符串char name20;char names3020;name字符串名,字符串名,即字符数组即字符数组名,就是该名,就是该字符数组第字符数组第一个元素的一个元素的地址地址name0name1name193字符数组的初始化字符数组的初始化给字符数组的全部元素赋初值给字符数组的全部元素赋初值字符串字符串cha
2、r a5=C,h,i,n,a;a0a1a2a3a4China4字符数组的初始化字符数组的初始化给字符数组的部分元素赋初值给字符数组的部分元素赋初值char a5=C,h,i;a0a1a2a3a4Chi00缺省的初值为缺省的初值为 0字符串字符串5字符数组的初始化字符数组的初始化给全部元素赋初值时,可以不指定长度给全部元素赋初值时,可以不指定长度字符串字符串char a =C,h,i,n,a;a0a1a2a3a4Chinachar a5=C,h,i,n,a;6字符数组的初始化字符数组的初始化用字符串常量给字符数组赋初值用字符串常量给字符数组赋初值字符串字符串char a = “China”;ch
3、ar a = “China”;char a6 = “China”;char a6 = “China”;a0a1a2a3a4a5China0来自字符串常量的来自字符串常量的结束字符结束字符 0 。7字符串的输入输出字符串的输入输出字符串的输入输出有几种方式字符串的输入输出有几种方式用格式输入输出函数逐个字符输入输出用格式输入输出函数逐个字符输入输出%c用格式输入输出函数作为整体输入输出用格式输入输出函数作为整体输入输出%s用字符串输入输出函数作为整体输入输出用字符串输入输出函数作为整体输入输出gets()puts()字符串字符串8字符串的输入输出字符串的输入输出用用%c逐个字符的输入输出逐个字符
4、的输入输出举例举例(cw1101.c)字符串字符串#include #define MAX 5void main() int n; char cMAX; printf(Input %d characters:n,MAX); for (n=0;nMAX;n+) scanf(%c,&cn); printf(Show the %d characters:n,MAX); for (n=0;nMAX;n+) printf(%c,cn);9字符串的输入输出字符串的输入输出用用%s实现字符串作为整体一次性的输入输出实现字符串作为整体一次性的输入输出举例举例(cw1102.c)字符串字符串#include #
5、define MAX 5void main() char cMAX; printf(Input c%d:n,MAX); scanf(%s,c); printf(Show c:n); printf(%s,c);输入和输出项都是数组名输入和输出项都是数组名在输入时,在输入时,空格空格、制表符制表符和和换行符换行符都被作为字符串的分都被作为字符串的分隔符,不被读入隔符,不被读入在输出时,一旦遇到在输出时,一旦遇到 0 就结束就结束10字符串的输入输出字符串的输入输出用标准库提供的字符串输入输出函数用标准库提供的字符串输入输出函数举例举例(cw1103.c)字符串字符串#include #define
6、 MAX 5void main() char cMAX; printf(Input c%d:n,MAX); gets(c); printf(Show c:n); puts(c);在输入时,在输入时,换行符换行符被作为数被作为数据的分隔符,不被读入据的分隔符,不被读入但是,但是,空格空格和和制表符制表符可以被可以被读入读入puts()输出字符串后自动输出字符串后自动换行换行11指针与字符串指针与字符串字符串指针字符串指针指向字符串(字符数组)字符指针。指向字符串(字符数组)字符指针。char str20=“China”, *p=str;printf(“%s”, p);China0char *p=
7、“China”;printf(“%s”, p);C语言对字符串常量是按字符数语言对字符串常量是按字符数组处理的。组处理的。char *p;p=“China”;printf(“%s”, p);China0p字符串字符串12指针与字符串指针与字符串字符数组和指针字符数组和指针比较比较char str5= “wuhan”;char *p=“wuhan”;char *p;p=“wuhan”;char str5;str= “wuhan”;=错错对对字符串字符串13指针与字符串指针与字符串字符数组和指针字符数组和指针比较比较char *p;scanf(“%s”, p);char str5, *p;p=st
8、r;scanf(“%s”, p);char str5;scanf(“%s”, str);错错对对对对在编译时为字符串数组分配内存单元,有确定的地址在编译时为字符串数组分配内存单元,有确定的地址虽然为字符指针变量分配了内存单元,但其值(地址)是虽然为字符指针变量分配了内存单元,但其值(地址)是不确定的,不可以使用不确定的,不可以使用字符串字符串14指针与字符串指针与字符串案例分析案例分析问题:字符串的拷贝。问题:字符串的拷贝。China0Chinese0afrmbtoChina0e0bvoid strCopy(char *frm, char *to) while(*to=*frm)!=0) fr
9、m+; to+; void main() char *a=China; char *b=Chinese; strCopy(a, b); printf(%s, b);China字符串字符串15字符和字符串标准库函数字符和字符串标准库函数字符函数:字符函数:字符串函数:字符串函数:常用的函数常用的函数strcat(字符数组名字符数组名1, 字符串字符串2)strcpy(字符数组名字符数组名1, 字符串字符串2)strcmp(字符串字符串1, 字符串字符串2)strlen(字符串字符串)strlwr(字符数组名字符数组名)strupr(字符数组名字符数组名)字符串转换库:字符串转换库:把数字字符串转
10、换成整数和浮点数把数字字符串转换成整数和浮点数字符串字符串字符串:字符串字符串:字符串数组名或者字符数组名或者字符串常量串常量16案例分析(一)案例分析(一)问题问题输入一行字符,统计其中有多少个单词,单词之间用空格输入一行字符,统计其中有多少个单词,单词之间用空格隔开。隔开。分析分析逐一检测字符,遇到单词的第一个字符就计数。逐一检测字符,遇到单词的第一个字符就计数。单词的第一个字符是一个非空格字符,且其前一个字符是空格。单词的第一个字符是一个非空格字符,且其前一个字符是空格。定义一个标记变量。定义一个标记变量。记住当前字符的前一个字符(最近检测的)是否是空格。记住当前字符的前一个字符(最近检
11、测的)是否是空格。字符串字符串Iamfrom017案例分析(一)案例分析(一)设计设计定义标记变量定义标记变量 word0 最近检测的字符是空格最近检测的字符是空格期待新单词出现期待新单词出现1最近检测的字符不是空格最近检测的字符不是空格正在读单词正在读单词期待单词的结束期待单词的结束字符串字符串i=0word=0num=0(c=si)!=0c= word=0i+word=0word=1num+NYNYNY18案例分析(一)案例分析(一)源代码源代码(cw1104.c)字符串字符串#include void main() char c, s81; int i, num, word; print
12、f(Input a sentence:n); gets(s);19案例分析(一)案例分析(一)源代码源代码字符串字符串 num=word=i=0; while (c=si)!=0) if (c= ) word=0; else if (word=0) word=1; num+; i+; printf(There are %d words in this sentence.n, num);扩展:扩展:输出这些单词输出这些单词统计每个单词出现的次数统计每个单词出现的次数20案例分析(二)案例分析(二)问题问题编程实现编程实现strcat()函数的功能。函数的功能。任意输入两个字符串,将它们连接成一个
13、字符串。任意输入两个字符串,将它们连接成一个字符串。分析分析字符串字符串xyz0abc0str1str2021案例分析(二)案例分析(二)源代码源代码(cw1105.c)字符串字符串#include void myStrcat(char str1, char str2) int i, j; for(i=0;str1i!=0;i+); for(j=0;str2j!=0;i+,j+) stri=str2j; stri=0;void main() char str1161, str281; printf(Input two strings:n); gets(str1); gets(str2); my
14、Strcat(str1, str2); printf(nNow, you get a new string:n%sn, str1);str1的长度要足够大的长度要足够大22案例分析(三)案例分析(三)问题问题输入一字符串,再输入一个字符,要求程序将字符串中该输入一字符串,再输入一个字符,要求程序将字符串中该字符删去。字符删去。分析分析字符串字符串wuhanda0wuhanda0读读写写例:删去空格例:删去空格wuhanda0读读写写23案例分析(三)案例分析(三)源代码源代码(cw1106.c)字符串字符串#include void main() void delLetter(char str
15、, char c); char str81, c; printf(Input a string:n); gets(str); printf(Input a letter:n); c=getchar(); delLetter(str, c); printf(Delete all %c from the string.n, c); printf(The string:n); puts(str);24案例分析(三)案例分析(三)源代码源代码字符串字符串void delLetter(char str, char c) int i, j; for (i=j=0;stri!=0;i+)if (stri!=
16、c) strj=stri; j+; strj=0;i是读指针是读指针j是写指针是写指针25案例分析(四):案例分析(四):TicTacToeTicTacToe问题:问题:“井井”字棋游戏(一担挑)字棋游戏(一担挑)游戏规则:游戏规则:双方轮流下子双方轮流下子每次一方只能在某一个空格处下一颗棋子每次一方只能在某一个空格处下一颗棋子胜负判断:胜负判断: 若棋盘的某一行,或某一列,抑或某一对角线上的三个格子被某一方若棋盘的某一行,或某一列,抑或某一对角线上的三个格子被某一方的棋子占据,则该方胜利;的棋子占据,则该方胜利; 否则,为平局否则,为平局字符串字符串26案例分析(四):案例分析(四):Tic
17、TacToeTicTacToe分析分析游戏过程游戏过程字符串字符串玩家胜利玩家胜利计算机胜利计算机胜利初始化棋盘初始化棋盘玩家下一颗棋子玩家下一颗棋子胜利?胜利?计算机下一颗棋子计算机下一颗棋子胜利?胜利?Y YY YN NN N怎么表示?怎么表示?怎么判断?怎么判断?计算机如何决策?计算机如何决策?27案例分析(四):案例分析(四):TicTacToeTicTacToe设计设计功能分解功能分解字符串字符串玩家胜利玩家胜利计算机胜利计算机胜利初始化棋盘初始化棋盘玩家下一颗棋子玩家下一颗棋子胜利?胜利?计算机下一颗棋子计算机下一颗棋子胜利?胜利?Y YY YN NN N初始化棋盘初始化棋盘显示棋
18、盘显示棋盘玩家走一步玩家走一步判断胜负判断胜负计算机走一步计算机走一步判断胜负判断胜负28案例分析(四):案例分析(四):TicTacToeTicTacToe设计设计功能模块功能模块字符串字符串初始化棋盘初始化棋盘: init_matrix()显示棋盘显示棋盘: disp_matrix()玩家走一步玩家走一步: get_player_move()判断胜负判断胜负: check()计算机走一步计算机走一步: get_computer_move()mainmain29案例分析(四):案例分析(四):TicTacToeTicTacToe设计设计数据结构数据结构字符串字符串3*3的二维字符数组:的二维
19、字符数组:char matrix33;全局变量。全局变量。玩家的棋子用玩家的棋子用X表示;表示;计算机的棋子用计算机的棋子用O表示;表示; 表示空。表示空。一步棋一步棋确定棋子的位置:坐标(确定棋子的位置:坐标(x,y)30案例分析(四):案例分析(四):TicTacToeTicTacToe实现实现(cw1107.c)源代码分析源代码分析字符串字符串char matrix33; /* the ticktacktoe matrix */void main(void) char done; printf(This is the game of ticktacktoe.n); printf(You
20、will be playing against the computer.n); done = ; init_matrix();done: 保存当前游戏的状态和结果保存当前游戏的状态和结果 游戏未结束,继续玩游戏未结束,继续玩 X 游戏结束,玩家胜游戏结束,玩家胜 O 游戏结束,计算机胜游戏结束,计算机胜31案例分析(四):案例分析(四):TicTacToeTicTacToe实现实现源代码分析源代码分析字符串字符串 do disp_matrix();get_player_move();done = check(); /* see if winner */if (done != ) break;
21、 /* winner! */get_computer_move();done = check(); /* see if winner */ while (done = ); if (done = X) printf(You won!n); else printf(I won!n); disp_matrix(); /* show final positions */32案例分析(四):案例分析(四):TicTacToeTicTacToe实现实现源代码分析源代码分析字符串字符串/* Initialize the matrix. */void init_matrix(void) int i, j;
22、for (i=0; i3; i+) for (j=0; j3; j+) matrixij = ;33案例分析(四):案例分析(四):TicTacToeTicTacToe实现实现源代码分析源代码分析字符串字符串/* Display the matrix on the screen. */void disp_matrix(void) int t; for (t=0; t3; t+) printf( %c | %c | %c, matrixt0, matrixt1, matrixt2);if (t != 2) printf(n-|-|-n); printf(n);34案例分析(四):案例分析(四):TicTacToeTicTacToe实现实现源代码分析源代码分析字符串字符串/* See if there is a winner. */char check(void) int i; for (i=0; i3; i+) /* check rows */if (matrixi0 = matrixi1 & matrixi0 = matrixi2) return matrixi0; for (i=0; i3; i+) /* check colums */if (matrix0i = matrix1i & matrix0i = matrix2i) return matrix0i;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国集装箱装卸车行业市场深度调研及发展前景与投资战略研究报告
- 2025-2030中国集成建筑行业发展分析及投资前景与战略规划研究报告
- 2025-2030中国降噪设备市场调研及重点企业投资评估规划分析研究报告
- 2025-2030中国防裂膏行业发展趋势与前景展望战略研究报告
- 2025-2030中国镇静催眠药市场销售渠道及发展方向分析研究报告
- 2025-2030中国锯木厂用刀片行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国锌电池行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030中国铝合金门窗行业发展分析及投资风险与战略研究报告
- 2025-2030中国金属盐热稳定剂行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030中国重型货车行业市场发展分析及发展趋势与投资战略研究报告
- 植被恢复安全施工方案
- 个税赡养老人专项扣除协定书
- 集装箱采购投标方案(技术方案)
- 下白雨合唱简谱
- 专家工作站日常管理制度
- 脂肪肝患者的自我管理宣教
- 篮球赛计分表模板
- GA/T 2034-2023法庭科学疑似毒品中咖啡因检验气相色谱和气相色谱-质谱法
- 古典诗歌表达技巧之“列锦”(公开课)课件
- 网络安全防护讲座课件
- 丁类厂房消防设计规范
评论
0/150
提交评论