《第4章 数组和字符串.pptx》由会员分享,可在线阅读,更多相关《第4章 数组和字符串.pptx(61页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、课程主讲人:第4章 数组和字符串C#C#程序设计程序设计第4章 数组 、 字符串3为什么使用数组为什么使用数组? ? 例:设计一个程序,将5个人某门课程的成绩输入计算机,输出平均成绩、最高分、最低分。 float a1,a2,a3,a4,a5;统计统计100100个人的成绩?个人的成绩?44.1 4.1 一维数组一维数组l100个人某一门课的成绩存储和处理个人某一门课的成绩存储和处理 要使用一个数组就必须先声明这个数组。要使用一个数组就必须先声明这个数组。54.1.1 4.1.1 一一维数维数组组的的声明声明语法语法:type arrayName; typetype:表示每个数组元素的类型,如
2、:表示每个数组元素的类型,如intint、doubledouble、 string string、charchar; arrayName arrayName:表示数组的名称。:表示数组的名称。例例:int intArray; /数组名为数组名为intArray, 数组元素均为数组元素均为int型。型。string stringArray; float score;注意:声明数组后并没有实际创建它们,还不能使用。注意:声明数组后并没有实际创建它们,还不能使用。使用前必须先通过初始化创建数组。使用前必须先通过初始化创建数组。64.1.2 4.1.2 一维数组的初始化一维数组的初始化初始化数组:根据
3、数组元素类型、数组名、数组初始化数组:根据数组元素类型、数组名、数组长度确定数组大小和位置,为数组分配内存空间。长度确定数组大小和位置,为数组分配内存空间。语法格式为:语法格式为:数组名数组名=new 数据类型数据类型数组元素个数数组元素个数;或或数组名数组名=new 数据类型数据类型数组元素个数数组元素个数 数组元素列表数组元素列表;如:float score; score = new float100;/ score数组有100个float型元素(变量),可以保存100个float型成绩,这些数组元素(变量)分别是:score0、score1、 score2、。、score99。74.1.
4、2 4.1.2 一维数组的初始化一维数组的初始化数组创建后,数组成员将自动具有默认初始值。数组创建后,数组成员将自动具有默认初始值。double ,float ,int ,long 等默认初值:等默认初值:0 。bool :false ;string :null; char :a如:float score; score = new float100;score0129984.1.2 4.1.2 一维数组的初始化一维数组的初始化初始化数组:根据数组元素类型、数组名、数组初始化数组:根据数组元素类型、数组名、数组长度确定数组大小和位置,为数组分配内存空间。长度确定数组大小和位置,为数组分配内存空间
5、。语法格式为:语法格式为:数组名数组名=new 数据类型数据类型数组元素个数数组元素个数;或或数组名数组名=new 数据类型数据类型数组元素个数数组元素个数 数组元素列表数组元素列表;如:float score; score = new float498,94,78,86;9也可以在声明数组的同时进行初始化:也可以在声明数组的同时进行初始化:例:例:int score = new int5 91, 82, 73, 94, 85 ; char a = new char i,l,c,#; string str = I,love,c,#;第一种方法,初始值列表数量必须等于声明的数组长度。第一种方法,
6、初始值列表数量必须等于声明的数组长度。第二或第三种方法,数组长度由初始值列表的数量决定。第二或第三种方法,数组长度由初始值列表的数量决定。4.1.2 4.1.2 一维数组的初始化一维数组的初始化104.1.3 4.1.3 数组数组元素的引用元素的引用一维数组元素的引用形式为: 数组名下标;float score=new float3;score0=97;score1=89;score2=66;注意:下标从0开始。114.1.4 4.1.4 一维数组应用举例一维数组应用举例 在快乐男声中,有在快乐男声中,有1010个评委为参赛的选手打分,分个评委为参赛的选手打分,分数为数为110110分。选手最
7、后得分为:去掉一个最高分和分。选手最后得分为:去掉一个最高分和一个最低分后其余一个最低分后其余8 8个分数的平均值。请编写一个个分数的平均值。请编写一个程序实现。程序实现。124.1.4 4.1.4 一维数组应用举例一维数组应用举例例:编写33选7抽奖程序。提示:提示:产生随机产生随机整数的整数的代码:代码:Random ran = new Random();int num = ran.Next(1, 34); /产生值在产生值在1,33之间的一个随机数。之间的一个随机数。134.1.4 4.1.4 一维数组应用举例一维数组应用举例在快乐男声中,有6个评委为参赛的选手打分,分数为110分。编写
8、一个程序由低到高,输出评委的评分。14985420895420859420854920854290854209大数沉淀,小数起泡大数沉淀,小数起泡a0a1a2a3a4a5for(int i=0;iai+1) int t=ai; ai=ai+1;ai+1=t; 冒泡排序算法冒泡排序算法15854209584209548209542809542089a0a1a2a3a4a516542089452089425089420589a0a1a2a3a4a517420589240589204589a0a1a2a3a4a518204589024589a0a1a2a3a4a5194.1.4 4.1.4 一维数组
9、应用举例一维数组应用举例冒泡排序算法: 在快乐男声中,有6个评委为参赛的选手打分,分数为110分。编写一个程序由低到高,输出评委的评分。for(int j=0; j5; j+)for(int i=0; iai+1) int t=ai; ai=ai+1;ai+1=t; ia99 Console.Write(请输入第一个数,x1=); string str1 = Console.ReadLine(); int x1 = Convert.ToInt32(str1); Console.Write(请输入第二个数,x2=); string str2 = Console.ReadLine(); int x
10、2 = Convert.ToInt32(str1); Console.WriteLine(0 1 2 3,x1+x2,x1-x2,x1*x2,x1/x2);414.5 4.5 字符串及其基本操作字符串及其基本操作float x1, x2; string str; bool invalidFlag = false;/数据是否有效标记 while (true) Console.Write(请输入第一个数,x1=); str = Console.ReadLine(); foreach (char n in str) if (n 9) Console.WriteLine(数据输入有误,请重新输入。);
11、 invalidFlag = true;/有非有效数据 break;/后面数据无需再判断,跳出foreach循环 424.5 4.5 字符串及其基本操作字符串及其基本操作 if (invalidFlag = true)/输入有非有效数据 invalidFlag = false;/重置标记,准备下一次判断 continue; /重新输入数据 else /输入数据有效 x1 = Convert.ToSingle(str); break; /跳出循环,结束第一个数的输入 434.5 4.5 字符串及其基本操作字符串及其基本操作 float x1, x2; string str; intput1: C
12、onsole.Write(请输入第一个数,x1=); str = Console.ReadLine(); foreach (char n in str) if (n 9) Console.WriteLine(数据输入有误,请重新输入。); goto intput1; x1 = Convert.ToSingle(str);444.5 4.5 字符串及其基本操作字符串及其基本操作 float x1, x2; string str; while (true) intput1: Console.Write(请输入第一个数,x1=); str = Console.ReadLine(); foreach
13、(char n in str) if (n 9) Console.WriteLine(数据输入有误,请重新输入。); goto intput1; x1 = Convert.ToSingle(str); break; 454.5 4.5 字符串及其基本操作字符串及其基本操作例:简单计算器程序中,输入非数值数据程序运行将出错。例:简单计算器程序中,输入非数值数据程序运行将出错。修改完善程序,输入非数据值时提示重新输入。修改完善程序,输入非数据值时提示重新输入。思考与练习思考与练习1:本例中并没有考虑小数点:本例中并没有考虑小数点“.”和负号和负号“-”也是有效的数值字符,思考如何进一步完善,编写也
14、是有效的数值字符,思考如何进一步完善,编写程序完成。程序完成。 if (n 9) Console.WriteLine(数据输入有误,请重新输入。); goto intput1; 思考与练习思考与练习2:本例在功能上,对于非有效数字的判断还不完善,还有本例在功能上,对于非有效数字的判断还不完善,还有bug。对于程序设计中常见的功能,对于程序设计中常见的功能,VS提供了大量现成的方法可供使提供了大量现成的方法可供使用 。 例 如 : 本 例 判 断 输 入 数 据 是 否 有 效 , 可 以 使 用用 。 例 如 : 本 例 判 断 输 入 数 据 是 否 有 效 , 可 以 使 用Single.
15、TryParse方法实现。请方法实现。请自行查阅资料自行查阅资料,掌握,掌握Single.TryParse方法,并采用方法,并采用Single.TryParse改写本例代码,并改写本例代码,并比较完成后的功能效果以及代码的简洁性。比较完成后的功能效果以及代码的简洁性。 使用使用VS中实现的方法可以更加准确、高效的完成程序设计所中实现的方法可以更加准确、高效的完成程序设计所要求实现的功能。在很大程度上,程序员对要求实现的功能。在很大程度上,程序员对VS中提供的大量方中提供的大量方法掌握的多少和掌握的熟练程度决定了程序员的编程能力的高法掌握的多少和掌握的熟练程度决定了程序员的编程能力的高下。下。V
16、S中提供的大量方法需要程序员在学习和不断的编程实践中提供的大量方法需要程序员在学习和不断的编程实践中掌握和积累。中掌握和积累。474.5 4.5 字符串及其基本操作字符串及其基本操作例:简单计算器程序中,输入非数值数据程序运行将出错。例:简单计算器程序中,输入非数值数据程序运行将出错。修改完善程序,输入非数据值时提示重新输入。修改完善程序,输入非数据值时提示重新输入。思考练习思考练习3:逻辑思路表达练习。:逻辑思路表达练习。若要求在输入两个数据后再判断这两个数据是否有效,若要求在输入两个数据后再判断这两个数据是否有效,并根据判断情况,对于非有效数据,提示并重新输入该数并根据判断情况,对于非有效
17、数据,提示并重新输入该数据。编程完成程序设计,表达该思路。据。编程完成程序设计,表达该思路。484.5 4.5 字符串及其基本操作字符串及其基本操作例:编写程序,判断一个字符串中大、小写字母分别有多少个。例:编写程序,判断一个字符串中大、小写字母分别有多少个。例:编写程序,判断一段字符串文本中有多少个单词。例:编写程序,判断一段字符串文本中有多少个单词。494.5.1 4.5.1 字符串比较字符串比较Equals方法方法:用于比较两个字符串是否相同。如果相同则返回值为true;否则,返回值为false。例: string s1 = abc,s2=aBc,s3=abc; bool a = s1.
18、Equals(s2); bool b = s1.Equals(s3); Console.WriteLine(s1=s2? 0ns1=s3? 1,a,b);504.5.1 4.5.1 字符串比较字符串比较Compare方法: 用于比较两个字符串的大小。如果字符串1大于字符串2,则返回值为1;如果字符串1等于字符串2,则返回值为0;如果字符串1小于字符串2,则返回值为-1。例: string str0 = 好好学习天天向上; string str1 = 我爱c#“; Console.WriteLine(string.Compare(str0, str1); /比较str0和str1 Console
19、.WriteLine(string.Compare(str0, 2, str1, 1, 3); /比较str0中从位置为2开始的3个字符和str1中从位置1开始的3个字符。即比较“学习天”和“爱c#”。注意下标从0开始,说明:汉字比较按汉语字典中排序位置比较,排在前面的字小于后面的字;英文比较按英文字典中排序位置比较,排在前面的字小于后面的字;514.5.1 4.5.1 字符串比较字符串比较例: string str1 = 我爱c#“; string str2 = 我爱C#; Console.WriteLine(string.Compare(str1, str2, true); /比较str1
20、和str2,比较中不区分大小写。 Console.WriteLine(string.Compare(str1, str2, false); /比较str1和str2,比较中区分大小写。 说明:同一英文字符,大写形式大于小写形式。524.5.1 4.5.1 字符串比较字符串比较CompareTo方法方法用于比较两个字符串的大小。如果字符串1大于字符串2,则返回值为1;如果字符串1等于字符串2,则返回值为0;如果字符串1小于字符串2,则返回值为-1。例: string yhm = Console.ReadLine(); string mm = Console.ReadLine(); if (yhm
21、.CompareTo(ustb) = 0 & string.Compare(mm,123456)=0) Console.WriteLine(欢迎登陆); else Console.WriteLine(用户名或密码错误!);534.5.2 4.5.2 判断字符串中是否含有指定字符或字符串判断字符串中是否含有指定字符或字符串Contains方法用于判断字符串变量中是否含有指定字符或字符串。若包含则返回true;否则返回false。例:string fileName = 金庸全集.rar,qq.exe, C#2010.iso, 竞赛统计.pdf, 循环.ppt, 作业.docx, 金庸经典.rar
22、; foreach (string str in fileName) if (str.Contains(金庸) Console.WriteLine(str); 544.5.3 4.5.3 查找字符串中指定字符或字符串出现的位置查找字符串中指定字符或字符串出现的位置IndexOf方法以从左向右的方式顺序查找字符串中指定字符或字符串第一次出现的位置,找到后返回开始出现的位置的索引值;若没有找到指定字符或字符串,则返回值为-1。例如: string str = 我喜欢看的是那些伟大的著作; int i = str.IndexOf(的); /在字符串str中从起始位置0开始查找的 第一次出现的位置,返
23、回值为int类型。 Console.WriteLine(的第一次出现的位置:0, i); i = str.IndexOf(的, 6); /在字符串str中从位置6开始,向后查找的 第一次出现的位置 Console.WriteLine(的第二次出现的位置:0, i); 554.5.3 4.5.3 查找字符串中指定字符或字符串出现的位置查找字符串中指定字符或字符串出现的位置IndexOfAny方法以从左向右的方式在字符串中顺序查找并返回字符数组中任意字符第一次出现的索引位置。若没有找到指定字符或字符串,则返回值为-1。例如:string str = 我喜欢看的是那些伟大的著作; Char mych
24、ar = 四,大,名,著; Console.WriteLine(mychar中字符首次出现的位置:0, str.IndexOfAny(mychar); /在字符串str中查找字符数组mychar中任意字符 第一次出现的位置564.5.4 4.5.4 截取字符串截取字符串SubString方法用于从一个字符串中获取指定的字符串。例:string str = 北京科技大学;Console.WriteLine(str.Substring(2); /在字符串str中,从起始位置2开始,获取所有字符。 Console.WriteLine(str.Substring(1, 3); /在字符串str中,从位
25、置1开始,获取3个字符。574.5.5 4.5.5 拆分拆分字符串字符串Split方法用于拆分字符串,即将一个字符串按指定的分隔字符或字符串分隔为多个字符串,并返回由多个子字符串组成的字符串数组。例如:string mysub = 三国演义,水浒传, 红楼梦,西游记; string subarray = mysub.Split(,); /以,为分隔符,将字符串mysub分割成多个 字符串,并保存在字符串数组subarray中。 foreach (string sub in subarray) Console.WriteLine(sub);584.5.6 4.5.6 替换字符串替换字符串Repl
26、ace方法可以将一个字符串中的指定字符或字符串替换为另个一个指定的字符或字符串。例:string str = 人们都说我的生活好快乐,我也认为自己真的快乐。;string newStr = str.Replace(快乐, happy); /将字符串str中的字符串“快乐”替换为字符串“happy”Console.WriteLine(替换后的句子:n + newStr);594.5.7 4.5.7 编程实例编程实例 字符串加密。字符串加密。 加密加密“飞雪飞雪连天射白连天射白鹿鹿 笑书神侠倚碧鸳笑书神侠倚碧鸳” 将上例中密文还原为明文。将上例中密文还原为明文。604.5.7 4.5.7 编程实例
27、编程实例 统计十九大报告中“人民”出现的次数。提示:将文件转化为字符串提示:将文件转化为字符串StreamReader reader = new StreamReader(f:sjd.txt, Encoding.GetEncoding(gb2312); string text = reader.ReadToEnd();614.5.7 4.5.7 编程实例编程实例 统计十九大报告中“人民”出现的次数。不忘初心,方得始终。中国共产党人的初心和使命,就不忘初心,方得始终。中国共产党人的初心和使命,就是为中国人民谋幸福,为中华民族谋复兴。这个初心和是为中国人民谋幸福,为中华民族谋复兴。这个初心和使命是激励中国共产党人不断前进的根本动力。全党同使命是激励中国共产党人不断前进的根本动力。全党同志一定要永远与人民同呼吸、共命运、心连心,永远把志一定要永远与人民同呼吸、共命运、心连心,永远把人民对美好生活的向往作为奋斗目标,以永不懈怠的精人民对美好生活的向往作为奋斗目标,以永不懈怠的精神状态和一往无前的奋斗姿态,继续朝着实现中华民族神状态和一往无前的奋斗姿态,继续朝着实现中华民族伟大复兴的宏伟目标奋勇前进。伟大复兴的宏伟目标奋勇前进。查找使用:查找使用:int m = text.IndexOf(“人民人民, start);
限制150内