您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > 第5章常用数据结构与算法
第5章常用数据结构与算法5.1字符串字符串(string)类型直接从object类派生,它是被密封的,不能再有派生类。5.1.1字符串类型定义1.定义2.两种字符串:(1)规则字符串:由包含在双引号中的零个或多个字符组成,并且可以包含简单转义序列、十六进制转义序列、Unicode转义序列。如:”hello”(2)逐字字符串:由@后跟双引号字符、零个或多个字符组成。如:@”hello”区别:规则字符串要对字符串中的转义序列进行解释逐字字符串除了对双引号进行解释之外,对其他字符,原样显示。例如:stringstr1;//定义字符串类型stringstr2=”hello,word”//规则字符串hello,wordstringstr3=@”hello,word”//逐字字符串hello,wordstringstr4=”hello\tword”//规则字符串hellowordstringstr5=@”hello\tword”//逐字字符串hello\tword5.1.2字符串类型的应用1.判断一个字符串的长度在C#中,字符串类型有一个Length属性,利用它可得到一个字符串变量或一个字符串常量的长度。例如:stringstr=”abcdefghijk”;//str变量中的串由11个字符组成Console.WriteLine(str.Length);//str变量的长度为11Console.WriteLine(”abcdefghijk”.Length);//直接取串的长度为112.比较两个字符串是否相等C#直接重载了”==”和”!=”两个运算符处理两个字符串是否相等。在C#中,字符串相等的条件:两个字符串都为空串(null)或两个字符串实例长度相同,并且每个字符位置中的字符都相同。例如:stringstr1=”abcdefghijk”;stringstr2=”abcdefghijk”;Console.WriteLine(str1==str2);//str1和str2相等,得到真值true3.字符串的连接直接使用”+”运算符.stringstr1=”abcde”;str1+=”fghijk”;Console.WriteLine(str1);//str1的值为”abcdefghijk”4.在字符串中插入另一字符串使用字符串类的Insert方法。该方法的参数有两个,前一个参数是新字符串要插入的位置,后一个参数是要插入的字符串。例如:stringstr1=”goodmorning!”;stringstr2=str1.Insert(1,”Hi,”)Console.WriteLine(str2);//str2的值为”Hi,goodmorning!”5.字符串替换使用字符串类的Replace方法。该方法的参数有两个,前一个参数是要被替换的字符串,后一个参数是要替换的字符串。例如:stringstr1=”Hello,goodmorning!”;stringstr2=str1.Replace(“ello”,”i,”);//”ello”被替换为”i”Console.WriteLine(str2);//str2的值为”Hi,goodmorning!”6.提取子串使用字符串类的Substring方法。该方法的参数有两个,前一个参数指出从第几个位置开始截取,后一个参数指出共提取几个字符。usingSystem;classTest{publicstaticvoidMain(){stringstr1=”Hi,goodmorning!”;inti;stringstr2;for(i=0;istr1.Length;i++){str2=str1.Substring(i,1);//从str1中第i个位置开始取一个字符Console.Write(“{0}”,str2);}}}运行结果:Hi,goodmorning!7.字符串的大小写转换使用字符串类的ToUpper方法和ToLower方法可以分别把一个字符串的所有字符都变成大写或小写。例如:usingSystem;classTest{publicstaticvoidMain(){stringstr1=”Hi,goodmorning!”;stringstr2=str1.ToUpper();//将str1中的所有字符变成大写Console.WriteLine(str2);str2=str1.ToLower();//将str1中的所有字符变成小写Console.WriteLine(str2);}}运行结果:HI,GOODMORNING!hi,goodmorning!8.去掉字符串两边的空格可使用Trim方法去掉前导空格和后缀空格。但不能去掉字符串第一个非空格字符和最后一个非空格字符之间的空格。例如:stringstr1=”Hello”;stringstr2=str1.Trim();//去掉str1的前导空格Console.WriteLine(str2);//str2的值为”Hello”9.访问字符串中的字符字符串是以“\0”结束的字符序列。从内存的角度看,字符串就是一个字符数组。可以通过数组的方式访问字符串中的单个字符。例如:stringmyString=”StringismadeofCharacterArray.”;/*字符变量chFirst的内容是字符串myString的第一个字符”S”*/charchFirst=myString[0];//字符串用字符的数组表示/*字符变量chLast的内容是字符串myString的最后一个字符”.”*/charchLast=myString[myString.Length-1];例题1(P118):usingSystem;classTest{publicstaticintMain(){stringUserName,Password;inti;boolAllow=false;for(i=0;i3;i++){Console.Write(“请输入用户名:”);UserName=Console.ReadLine();Console.Write(“请输入口令:”);Password=Console.ReadLine();if(UserName.Trim().ToLower()==”admin”‖Password==”123456”){Allow=true;break;}else{if(i2)Console.WriteLine(“你输入的用户名或密码不正确,请重新输入。”);}}//for结束if(Allow==false){Console.WriteLine(“非法用户,不能进入系统。”);return1;}else{Console.WriteLine(“你好,欢迎进入系统。”);return0;}}}例题2(P120):略5.2数组数组类型是从系统抽象类System.Array中派生而来的引用型数据。C#中的数组下标(又称索引)是从0开始的。在数组中,每一个成员叫数组元素,所有数组元素具有相同的数据类型。5.2.1数组的定义C#中的数组维数被称为秩(Rank),数组的秩直接决定了数组的下标数。如果一个数组的秩为1,则该数组为一维数组,如果一个数组的秩大于1,则该数组为多维数组。在数组中数组元素的个数,叫这个维中的数组长度。无论是一维数组还是多维数组,其下标都从0开始,结束于这个维的长度减1。数组定义的格式:数组类型修饰符[]数组名=new数组类型[]{数组元素初始化列表};例如:1.int[]arr=newint[3];/*一维数组arr长度为3,arr[0],arr[1],arr[2]各数组元素被初始化为默认值0*/等价于:int[]arr;arr=newint[3];2.必须使用常量(可以是直接常量)定义数组的大小。例如:intconstArrayLength=5;int[]myArray=newint[ArrayLength];//定义一维数组myArray长度为53.在定义时对数组元素初始化,这时就不用再指出数组的大小,系统自动把初始化列表中的元素个数作为数组的长度。例如:string[]arrLanguages=newstring[]{”c”,”c++”,”c#”};还可写为:string[]arrLanguages={”c”,”c++”,”c#”};4.int[,]arr=newint[5,3];//定义二维数组arr,长度为155.int[,]arr={{0,1},{2,3},{4,5}};等价于int[,]arr=newint[3,2];arr[0,0]=0;arr[0,1]=1;arr[1,0]=2;arr[1,1]=3;arr[2,0]=4;arr[2,1]=5;注意:数组越界和类型溢出在运行时才会被发现。5.2.2数组的使用1.一维数组的使用例如:对用户输入的一个字符串,统计其中每个字母再现的次数。假设不区分大小写。(P123)namespace字母个数{classClass1{staticvoidMain(string[]args){int[]CharNum=newint[26];//定义数组,用于26个字母计数intOther;//记录除字母之外的任意字符的个数inti;//循环控制变量chartemp;//临时变量stringstrTest;//要检测的字符串for(i=0;i26;i++)CharNum[i]=0;//CharNum数组元素均赋初值0Other=0;Console.WriteLine(请输入要统计的字符串:);strTest=Console.ReadLine();strTest=strTest.ToUpper();//转成大写字母,便于统计Console.WriteLine(字符出现的次数);for(i=0;istrTest.Length;i++){temp=strTest[i];//取strTest中第i个字母if(temp='A'&&temp='Z')CharNum[temp-'A']++;//相应字母计数加1elseOther++;}for(i=0;i26;i++)if(CharNum[i]!=0)Console.WriteLine({0}{1},(char)(i+'a'),CharNum[i]);Console.WriteLine(Other{0},Other);}}}运行结果:请输入要统计的字符串:Madam,I’mAdam字符出现次数a4d2i1m4Other42.多维数组的使用例如:假设某班有50人,每名同学一次参加5门考试,要求计算每位同学的总分和每门课的全班平均分。(P124)namespace平均分{classClass1{staticvoidMain(string[]args){constintPupil=50;//定义整型常量Pupil为50个学生constintClass=5;//定义整型常量Class为5门课程int[,]Score={{78,90,89,85,92},{89,85,79,100,95},{60,70,80,90,95},{95,85,75,65,60},{94,86,78,89,95},{78,90,89,85,92},{89,85,79,100,95},{60,70,80,90,95},{95,85,75,65,60},{94,86,78,89,95},{78,90,89,85,92},{89,85,79,100,95},{60,70,80,90,95},{95,85,75,65,60},{94,86,78,89,95},{78,90,89,85,92},{89,85,79,100,95},{60,70,80,90,95},{95,85,75,65,60},{94,86,78,89,95},{78,90,89,85,92},{89,85,79,100,95},{60,70,80,90,95},{95,85,75,65,60},{94,86,78,89,95},{78,90,8
本文标题:第5章常用数据结构与算法
链接地址:https://www.777doc.com/doc-2196162 .html