第7章 常用數(shù)據(jù)結(jié)構(gòu)與算法_第1頁
第7章 常用數(shù)據(jù)結(jié)構(gòu)與算法_第2頁
第7章 常用數(shù)據(jù)結(jié)構(gòu)與算法_第3頁
第7章 常用數(shù)據(jù)結(jié)構(gòu)與算法_第4頁
第7章 常用數(shù)據(jù)結(jié)構(gòu)與算法_第5頁
已閱讀5頁,還剩106頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第7章常用數(shù)據(jù)結(jié)構(gòu),2010-9-25,數(shù)據(jù)結(jié)構(gòu)和算法是程序設(shè)計(jì)的基石。本章重點(diǎn)講述C#中的幾個(gè)主要的數(shù)據(jù)結(jié)構(gòu)類型:字符串、數(shù)組和枚舉。,2020/7/4,2,C#程序設(shè)計(jì)實(shí)用教程,7.1字符串,字符串是應(yīng)用程序和用戶交互的主要方式之一。.NET提供了幾個(gè)類來快速實(shí)現(xiàn)字符串操作,包括String、StringBuilder等。,2020/7/4,3,C#程序設(shè)計(jì)實(shí)用教程,7.1.1靜態(tài)字符串String,System.String是最常用的字符串操作類。下面從各個(gè)應(yīng)用的角度對String類進(jìn)行詳細(xì)的介紹。比較字符串定位字符和字串格式化字符串分割字符串插入和填充字符串刪除和剪切字符串復(fù)制字符串更

2、換字符串更改大小寫,2020/7/4,4,C#程序設(shè)計(jì)實(shí)用教程,1.比較字符串,1.比較字符串比較字符串是指按照字典排序規(guī)則,判定兩個(gè)字符的相對大小。在String類中,常用的比較字符串的方法包括CompareCompareToCompareOrdinalEquals,7.1.1靜態(tài)字符串String,(1)Compare方法Compare方法是String類的靜態(tài)方法,用于全面比較兩個(gè)字符串對象。例:System.StringstrA=Hello;System.StringstrB=World;Console.WriteLine(String.Compare(strA,strB);/-1Co

3、nsole.WriteLine(String.Compare(strA,strA);/0Console.WriteLine(String.Compare(strB,strA);/1,2020/7/4,6,C#程序設(shè)計(jì)實(shí)用教程,7.1.1靜態(tài)字符串String,(2)CompareTo方法CompareTo方法將當(dāng)前字符串對象與另一個(gè)對象做比較,其作用與Compare類似,返回值也相同。CompareTo與Compare相比,區(qū)別在于:CompareTo不是靜態(tài)方法,沒有重載形式,只能按照大小寫敏感方式比較兩個(gè)整串。例:System.StringstrA=Hello;System.Strings

4、trB=World;Console.WriteLine(strA.CompareTo(strB);/-1,2020/7/4,7,C#程序設(shè)計(jì)實(shí)用教程,7.1.1靜態(tài)字符串String,(3)Equals方法Equals方法用于方便地判定兩個(gè)字符串是否相同,有兩種重載形式:publicboolEquals(string)publicstaticboolEquals(string,string)如果兩個(gè)字符串相等,Equals()返回值為True;否則,返回False。Console.WriteLine(String.Equals(strA,strB);/falseConsole.WriteLin

5、e(strA.Equals(strB);/false,2020/7/4,8,C#程序設(shè)計(jì)實(shí)用教程,7.1.1靜態(tài)字符串String,(4)比較運(yùn)算符String支持兩個(gè)比較運(yùn)算符“=”、“!=”,分別用于判定兩個(gè)字符是否相等和不等,并區(qū)分大小寫。下例中,使用“=”、“!=”對“Hello”和“World”進(jìn)行比較。/=和!=Console.WriteLine(strA=strB);/falseConsole.WriteLine(strA!=strB);/true,2020/7/4,9,C#程序設(shè)計(jì)實(shí)用教程,7.1.1靜態(tài)字符串String,2.定位字符和子串定位子串是指在一個(gè)字符串尋找其中包含

6、的子串或者某個(gè)字符,在String類中,常用的定位子串和字符的方法包括:StartWith/EndsWith、IndexOf/LastIndexOfIndexOfAny/LastIndexOf。,2020/7/4,10,C#程序設(shè)計(jì)實(shí)用教程,2.定位字符和子串,7.1.1靜態(tài)字符串String,(1)StartWith/EndsWith方法StartWith方法可以判定一個(gè)字符串對象是否以另一個(gè)子字符串開頭,如果是返回True;否則返回False。其定義為:publicboolStartsWith(stringvalue)其中,參數(shù)value即待判定的子字符串。/StartWithConsol

7、e.WriteLine(strA.StartsWith(He);/trueConsole.WriteLine(strA.StartsWith(She);/false另外,EndsWith方法可以判定一個(gè)字符是否以另一個(gè)子字符串結(jié)尾。,2020/7/4,11,C#程序設(shè)計(jì)實(shí)用教程,7.1.1靜態(tài)字符串String,(2)IndexOf/LastIndexOf方法IndexOf方法用于搜索一個(gè)字符串,某個(gè)特定的字符或子串第一次出現(xiàn)的位置,該方法區(qū)分大小寫,并從字符串的首字符開始以計(jì)數(shù)。如果字符串中不包含這個(gè)字符或子串,則返回-1。定位字符:intIndexOf(charvalue)intIndex

8、Of(charvalue,intstartIndex)intIndexOf(charvalue,intstartIndex,intcount),2020/7/4,12,C#程序設(shè)計(jì)實(shí)用教程,7.1.1靜態(tài)字符串String,定位子串:intIndexOf(stringvalue)intIndexOf(stringvalue,intstartIndex)intIndexOf(stringvalue,intstartIndex,intcount)在上述重載形式中,其參數(shù)含義如下:Value:待定位的字符或者子串。startIndex:在總串中開始搜索的起始位置。Count:在總串中從起始位置開始搜

9、索的字符數(shù)。,2020/7/4,13,C#程序設(shè)計(jì)實(shí)用教程,7.1.1靜態(tài)字符串String,下例在“Hello”中尋找字符“l(fā)”第一次出現(xiàn)的位置。/IndexofConsole.WriteLine(strA.IndexOf(l);/2同IndexOf類似,LastIndexOf用于搜索在一個(gè)字符串中,某個(gè)特定的字符或子串最后一次出現(xiàn)的位置,其方法定義和返回值都與IndexOf相同。,2020/7/4,14,C#程序設(shè)計(jì)實(shí)用教程,7.1.1靜態(tài)字符串String,(3)IndexOfAny/LastIndexOfAnyIndexOfAny方法功能同IndexOf類似,區(qū)別在于,可以搜索在一個(gè)字

10、符串中,出現(xiàn)在一個(gè)字符數(shù)組中的任意字符第一次出現(xiàn)的位置。,2020/7/4,15,C#程序設(shè)計(jì)實(shí)用教程,7.1.1靜態(tài)字符串String,下例在“Hello”中尋找字符“l(fā)”第一次和最后一次出現(xiàn)的位置。charanyOf=H,e,l;Console.WriteLine(strA.IndexOfAny(anyOf);/0Console.WriteLine(strA.LastIndexOfAny(anyOf);/3同IndexOfAny類似,LastIndexOfAny用于搜索在一個(gè)字符串中,出現(xiàn)在一個(gè)字符數(shù)組中任意字符最后一次出現(xiàn)的位置。,2020/7/4,16,C#程序設(shè)計(jì)實(shí)用教程,7.1.1

11、靜態(tài)字符串String,3.格式化字符串Format方法用于創(chuàng)建格式化的字符串以及連接多個(gè)字符串對象。Foramt方法也有多個(gè)重載形式,最常用的為:publicstaticstringFormat(stringformat,paramsobjectargs);其中,參數(shù)format用于指定返回字符串的格式,而args為一系列變量參數(shù)。,2020/7/4,17,C#程序設(shè)計(jì)實(shí)用教程,3.格式化字符串,7.1.1靜態(tài)字符串String,newStr=;newStr=String.Format(0,1!,strA,strB);Console.WriteLine(newStr);/Hello,Worl

12、d!在format參數(shù)中包含一些用大括號括起來的數(shù)字,如0、1,這些數(shù)字分別一一對應(yīng)于args參數(shù)數(shù)組中的變量。在生成結(jié)果字符串時(shí),將使用這些變量代替i。需要說明的是,這些變量并不要求必須為String類型。,2020/7/4,18,C#程序設(shè)計(jì)實(shí)用教程,7.1.1靜態(tài)字符串String,例如,想要輸出一定格式的時(shí)間字符串,便可以使用Format方法,如下面代碼所示。newStr=String.Format(CurrentTime=0:yyyy-MM-dd,System.DateTime.Now);Console.WriteLine(newStr);/形如:2008-09-19其中,格式字符串

13、“yyyy-MM-dd”指定返回時(shí)間的格式形如“2008-09-19”。,2020/7/4,19,C#程序設(shè)計(jì)實(shí)用教程,7.1.1靜態(tài)字符串String,4.連接字符串(1)Concat方法Concat方法用于連接兩個(gè)或多個(gè)字符串newStr=;newStr=String.Concat(strA,strB);Console.WriteLine(newStr);/“HelloWorld,2020/7/4,20,C#程序設(shè)計(jì)實(shí)用教程,4.連接字符串,7.1.1靜態(tài)字符串String,(2)Join方法Join方法利用一個(gè)字符數(shù)組和一個(gè)分隔符串構(gòu)造新的字符串。常用于把多個(gè)字符串連接在一起,并用一個(gè)特

14、殊的符號來分隔開。Join方法的常用形式為:publicstaticstringJoin(stringseparator,stringvalues);其中,參數(shù)separator為指定的分隔符,而values用于指定所要連接的多個(gè)字符串?dāng)?shù)組。,2020/7/4,21,C#程序設(shè)計(jì)實(shí)用教程,7.1.1靜態(tài)字符串String,下例用“”分隔符把“Hello”和“World”連起來。/JoinnewStr=;StringstrArr=strA,strB;newStr=String.Join(,strArr);Console.WriteLine(newStr);/HelloWorld,2020/7/4

15、,22,C#程序設(shè)計(jì)實(shí)用教程,7.1.1靜態(tài)字符串String,(3)連接運(yùn)算符“+”String支持連接運(yùn)算符“+”,可以方便地連接多個(gè)字符串。例如,下例把“Hello”和“World”連接起來。/+newStr=;newStr=strA+strB;Console.WriteLine(newStr);/HelloWorld,2020/7/4,23,C#程序設(shè)計(jì)實(shí)用教程,7.1.1靜態(tài)字符串String,5.分隔字符串使用Split方法可以把一個(gè)整串,按照某個(gè)分隔符,分裂成一系列小的字符串。例如,把整串,按照某個(gè)分隔符,分裂成一系列小的字符串。例如,把整串“HelloWorld”按照字符“”進(jìn)

16、行分裂,可以得到3個(gè)小的字符串,即“Hello”、“”(空串)和“World”。Split方法最常用的形式為:publicstringSplit(paramscharseparator);其中,參數(shù)separator數(shù)組包含分隔符。,2020/7/4,24,C#程序設(shè)計(jì)實(shí)用教程,7.1.1靜態(tài)字符串String,/SplitnewStr=HelloWorld;charseparator=;StringsplitStrings=newString100;splitStrings=newStr.Split(separator);inti=0;while(isplitStrings.Length)C

17、onsole.WriteLine(item0:1,i,splitStringsi);i+;,輸出結(jié)果如下:Item0:HelloItem1:Item2:World,2020/7/4,25,C#程序設(shè)計(jì)實(shí)用教程,7.1.1靜態(tài)字符串String,6.插入和填充字符串String類包含了在一個(gè)字符串中插入新元素的方法,可以用Insert方法在任意插入任意字符。Insert方法用于在一個(gè)字符串的指定位置插入另一個(gè)字符串,從而構(gòu)造一個(gè)新的串。Insert方法最常用的為:publicstringInsert(intstartIndex,stringvalue);其中,參數(shù)startIndex用于指定所要

18、插入的位置,從開始索引;value指定所要插入的字符串。,2020/7/4,26,C#程序設(shè)計(jì)實(shí)用教程,7.1.1靜態(tài)字符串String,下例中,在“Hello”的字符“H”后面插入“World”,構(gòu)造一個(gè)串“HWorldello”。newStr=;newStr=strA.Insert(1,strB);Console.WriteLine(newStr);/HWorldello,2020/7/4,27,C#程序設(shè)計(jì)實(shí)用教程,7.1.1靜態(tài)字符串String,7.刪除和剪切字符串String類包含了刪除一個(gè)字符串的方法??梢杂肦emove方法在任意位置刪除任意長度的字符。也可以使用Trim/Tri

19、meEnd/TrimStart方法剪切掉字符串中的一些特定字符。,2020/7/4,28,C#程序設(shè)計(jì)實(shí)用教程,7.1.1靜態(tài)字符串String,(1)Remove方法Remove方法從一個(gè)字符串的指定位置開始,刪除指定數(shù)量的字符。最常用的形式為:publicstringRemove(intstartIndex,intcount);其中,參數(shù)startIndex用于指定開始刪除的位置,從開始索引;count指定刪除的字符數(shù)量。下例中,把“Hello”中的“ell”刪掉。/RemovenewStr=;newStr=strA.Remove(1,3);Console.WriteLine(newStr

20、);/Ho,2020/7/4,29,C#程序設(shè)計(jì)實(shí)用教程,7.1.1靜態(tài)字符串String,(2)Trim/TrimStart/TrimEnd方法若想把一個(gè)字符串首尾處的一些特殊字符剪切掉,如去掉一個(gè)字符串首尾的空格等,可以使用String的Trim()方法。其形式如下:publicstringTrim()publicstringTrim(paramschartrimChars)其中,參數(shù)trimChars數(shù)組包含了指定要去掉的字符,如果缺省,則刪除空格符號。下例中,實(shí)現(xiàn)了對“Hello#$”的凈化,去掉首尾的特殊符號。,2020/7/4,30,C#程序設(shè)計(jì)實(shí)用教程,7.1.1靜態(tài)字符串Str

21、ing,/TrimnewStr=;chartrimChars=,#,$,;StringstrC=Hello#$;newStr=strC.Trim(trimChars);Console.WriteLine(newStr);/Hello另外,同Trim類似,TrimStart和TrimEnd分別剪切掉一個(gè)字符串開頭和結(jié)尾處的特殊字符。,2020/7/4,31,C#程序設(shè)計(jì)實(shí)用教程,7.1.1靜態(tài)字符串String,8.復(fù)制字符串String類包括了復(fù)制字符串方法Copy和CopyTo,可以完成對一個(gè)字符串及其一部分的復(fù)制操作。,2020/7/4,32,C#程序設(shè)計(jì)實(shí)用教程,7.1.1靜態(tài)字符串St

22、ring,(1)Copy方法若想把一個(gè)字符串復(fù)制到另一個(gè)字符數(shù)組中,可以使用String的靜態(tài)方法Copy來實(shí)現(xiàn),其形式為:publicstringCopy(stringstr);其中,參數(shù)str為需要復(fù)制的源字符串,方法返回目標(biāo)字符串。下例中,把strA字符串“Hello”復(fù)制到newStr中。/CopynewStr=;newStr=String.Copy(strA);Console.WriteLine(newStr);/Hello,2020/7/4,33,C#程序設(shè)計(jì)實(shí)用教程,7.1.1靜態(tài)字符串String,(2)CopyTo方法CopyTo方法可以實(shí)現(xiàn)Copy同樣的功能,但功能更為豐富

23、,可以復(fù)制字符串的一部分到一個(gè)字符數(shù)組中。其形式為:publicvoidCopyTo(intsourceIndex,chardestination,intdestinationIndex,intcount);其中,參數(shù)sourceIndex為需要復(fù)制的字符起始位置,destination為目標(biāo)字符數(shù)組,destinationIndex指定目標(biāo)數(shù)組中的開始存放位置,而count指定要復(fù)制的字符個(gè)數(shù)。,2020/7/4,34,C#程序設(shè)計(jì)實(shí)用教程,7.1.1靜態(tài)字符串String,下例中,把strA字符串“Hello”中的“ell”復(fù)制到newCharArr中,并在newCharArr中從第2個(gè)元

24、素開始存放。/CopyTocharnewCharArr=newchar100;strA.CopyTo(2,newCharArr,0,3);Console.WriteLine(newCharArr);/”llo,2020/7/4,35,C#程序設(shè)計(jì)實(shí)用教程,7.1.1靜態(tài)字符串String,9.替換字符串想要替換一個(gè)字符串中的某些特定字符或者某個(gè)子串,可以使用Replace方法來實(shí)現(xiàn),其形式為:publicstringReplace(charoldChar,charnewChar);publicstringReplace(stringoldValue,stringnewValue);其中,參數(shù)o

25、ldChar和oldValue為待替換的字符和子串,而newChar和newValue為替換后的新字符和新子串。下例把“Hello”通過替換變?yōu)椤癏ero”。/ReplacenewStr=strA.Replace(ll,r);Console.WriteLine(newStr);/Hero,2020/7/4,36,C#程序設(shè)計(jì)實(shí)用教程,7.1.1靜態(tài)字符串String,10.更改大小寫String提供了方便轉(zhuǎn)換字符串中所有字符大小寫的方法ToUpper和ToLower。下例首先把“Hello”轉(zhuǎn)換為“HELLO”,然后再變?yōu)樾懶问健癶ello”。/ToUpper|ToLowernewStr=s

26、trA.ToUpper();Console.WriteLine(newStr);/HELLOnewStr=strA.ToLower();Console.WriteLine(newStr);/hello,2020/7/4,37,C#程序設(shè)計(jì)實(shí)用教程,7.1.1靜態(tài)字符串String,11.String小結(jié)本節(jié)介紹了最常用的String類,并從比較、定位子串、格式化、連接、分裂、插入、刪除、復(fù)制、大小寫轉(zhuǎn)換10個(gè)方面介紹了其方法和應(yīng)用。之所以稱String對象為靜態(tài)串,是因?yàn)橐坏┒x一個(gè)String對象,就是不可改變的。在使用其方法(如插入、刪除操作)時(shí),都要在內(nèi)存中創(chuàng)建一個(gè)新的String對象,

27、而不是在原對象的基礎(chǔ)上進(jìn)行修改,這就需要開辟新的內(nèi)存空間。如果需要經(jīng)常進(jìn)行串修改操作,使用String類無疑是非常耗費(fèi)資源的,這時(shí)需要使用StringBuilder類。,2020/7/4,38,C#程序設(shè)計(jì)實(shí)用教程,7.1.2動態(tài)字符串StringBuilder,與String類相比,System.Text.StringBuilder類可以實(shí)現(xiàn)動態(tài)字符串。此外,動態(tài)的含義是指在修改字符串時(shí),系統(tǒng)不需要創(chuàng)建新的對象,不會重復(fù)開辟新的內(nèi)存空間,而是直接在原StringBuilder對象的基礎(chǔ)上進(jìn)行修改。,2020/7/4,39,C#程序設(shè)計(jì)實(shí)用教程,7.1.2動態(tài)字符串StringBuilder,

28、1.聲明StringBuilder串StringBuilder類位于命名空間System.Text中,使用時(shí),可以在文件頭通過using語句引入該命名空間:usingSystem.Text;聲明StringBuilder對象需要使用new關(guān)鍵字,并可以對其進(jìn)行初始化。如以下語句聲明了一個(gè)StringBuilder對象myStringBuilder,并初始化為“Hello”:StringBuildermyStringBuilder=newStringBuilder(Hello);,2020/7/4,40,C#程序設(shè)計(jì)實(shí)用教程,7.1.2動態(tài)字符串StringBuilder,2.設(shè)置StringB

29、uilder容量StringBuilder對象為動態(tài)字符串,可以對其設(shè)置好的字符數(shù)量進(jìn)行擴(kuò)展。另外,還可以設(shè)置一個(gè)最大長度,這個(gè)最大長度稱為該StringBuilder對象的容量(Capacity)。,2020/7/4,41,C#程序設(shè)計(jì)實(shí)用教程,7.1.2動態(tài)字符串StringBuilder,有兩種方式來設(shè)置一個(gè)StringBuilder對象的容量。(1)使用構(gòu)造函數(shù)StringBuilder構(gòu)造函數(shù)可以接受容量參數(shù),例如,下面聲明一個(gè)StringBuilder對象sb2,并設(shè)置其容量為100。/使用構(gòu)造函數(shù)StringBuildersb2=newStringBuilder(Hello,10

30、0);,2020/7/4,42,C#程序設(shè)計(jì)實(shí)用教程,7.1.2動態(tài)字符串StringBuilder,(2)使用Capacity讀/寫屬性Capacity屬性指定StringBuilder對象的容量。例如下面語句首先一個(gè)StringBuilder對象sb3,然后利用Capacity屬性設(shè)置其容量為100。/使用Capacity屬性StringBuildersb3=newStringBuilder(Hello);sb3.Capacity=100;,2020/7/4,43,C#程序設(shè)計(jì)實(shí)用教程,7.1.2動態(tài)字符串StringBuilder,3.追加操作追加一個(gè)StringBuilder是指將新的

31、字符串添加到當(dāng)前StringBuilder字符串的結(jié)尾處,可以使用Append和AppendFormat來實(shí)現(xiàn)這個(gè)功能。(1)Append方法下例中,把一個(gè)StringBuilder字符串“Hello”追加為“HelloWorld!”。/AppendStringBuildersb4=newStringBuilder(Hello);sb4.Append(World!);Console.WriteLine(sb4);/HelloWorld!,2020/7/4,44,C#程序設(shè)計(jì)實(shí)用教程,7.1.2動態(tài)字符串StringBuilder,(2)AppendFormat方法AppendFormat方法可

32、以實(shí)現(xiàn)對追加部分字符串的格式化,可以定義變量的格式,并將格式化后的字符串追加在StringBuilder后面。,2020/7/4,45,C#程序設(shè)計(jì)實(shí)用教程,7.1.2動態(tài)字符串StringBuilder,4.插入操作StringBuilder的插入操作是指將新的字符串插入到當(dāng)前的StringBuilder字符串的指定位置,如“Hello”變?yōu)椤癏eeeello”??梢允褂肧tringBuilder類的Insert方法來實(shí)現(xiàn)這個(gè)功能,常用形式為:publicStringBuilderInsert(intindex,objectvalue);其中,參數(shù)index指定所要插入的位置,并從0開始索引

33、,如index=1,則會在原字符串的第2個(gè)字符之前進(jìn)行插入操作;同Append一樣,參數(shù)value并不僅是只可取字符串類型。,2020/7/4,46,C#程序設(shè)計(jì)實(shí)用教程,7.1.2動態(tài)字符串StringBuilder,下例中,把一個(gè)StringBuilder字符串“Hello”通過插入操作修改為“Heeeello”。/InsertStringBuildersb6=newStringBuilder(Hello);sb6.Insert(2,eee);Console.WriteLine(sb6);/Heeeello,2020/7/4,47,C#程序設(shè)計(jì)實(shí)用教程,7.1.2動態(tài)字符串StringBu

34、ilder,5.刪除操作StringBuilder的刪除操作可以從當(dāng)前StringBuilder字符串的指定位置,刪除一定數(shù)量的字符,例如把“Heeeello”變?yōu)椤癏ello”。可以使用StringBuilder類的Remove方法來實(shí)現(xiàn)這個(gè)功能,常用形式為:publicStringBuilderRemove(intstartIndex,intlength);其中,參數(shù)startIndex指定所要刪除的起始位置,其含義同Insert中的index相同;length參數(shù)指定所要刪除的字符數(shù)量。,2020/7/4,48,C#程序設(shè)計(jì)實(shí)用教程,7.1.2動態(tài)字符串StringBuilder,下例中

35、,把一個(gè)StringBuilder字符串“Heeeello”通過刪除操作修改為“Hello”。/RemoveStringBuildersb7=newStringBuilder(Heeello);sb7.Remove(2,2);/在”He”后面刪除個(gè)字符Console.WriteLine(sb7);/Hello!,2020/7/4,49,C#程序設(shè)計(jì)實(shí)用教程,7.1.2動態(tài)字符串StringBuilder,6.替換操作StringBuilder使用Replace方法來實(shí)現(xiàn)替換操作,例如把“Hello”變?yōu)椤癏ero”,就需要使用替換操作,將“l(fā)l”替換為“r”。這同String類的Replace

36、方法非常類似,其常用形式包括:publicStringBuilderReplace(charoldChar,charnewChar);publicStringBuilderReplace(stringoldValue,stringnewValue);其中,參數(shù)oldChar和oldValue為待替換的字符和子串,而newChar和newValue為替換后的新字符和新子串。,2020/7/4,50,C#程序設(shè)計(jì)實(shí)用教程,7.1.2動態(tài)字符串StringBuilder,下例把“Hello”通過替換為“Hero”。/ReplaceStringBuildersb8=newStringBuilder(H

37、ello);sb8=sb8.Replace(ll,r);Console.WriteLine(sb8);/Hero,2020/7/4,51,C#程序設(shè)計(jì)實(shí)用教程,7.1.2動態(tài)字符串StringBuilder,7.與String比較可以看出StringBuilder與String在許多操作上是非常相似的。而在操作性能和內(nèi)存效率方面,StringBuilder要比String好得多。而另一方面,String類提供了更多的方法,可以使開發(fā)能夠更快地實(shí)現(xiàn)應(yīng)用。在兩者的選擇上,如果應(yīng)用對于系統(tǒng)性能、內(nèi)存要求比較嚴(yán)格,以及經(jīng)常處理大規(guī)模的字符串,推薦使用StringBuilder對象;否則,可以選擇使用S

38、tring。,2020/7/4,52,C#程序設(shè)計(jì)實(shí)用教程,7.2數(shù)組,數(shù)組的作用非常強(qiáng)大,數(shù)據(jù)也是基本數(shù)據(jù)結(jié)構(gòu)之一,是編程實(shí)現(xiàn)過程中必不可少的要素之一。,2020/7/4,53,C#程序設(shè)計(jì)實(shí)用教程,7.2.1數(shù)組的概念,數(shù)組(Array)是一種數(shù)據(jù)結(jié)構(gòu),一個(gè)數(shù)組由若干個(gè)類型相同的數(shù)組元素的變量,這些變量可以通過一個(gè)數(shù)組名和數(shù)組下標(biāo)(或者稱為索引)來訪問。C#中的數(shù)組下標(biāo)是從零開始,數(shù)組中的所在元素都具有相同的類型。在數(shù)組中,每一個(gè)成員叫做數(shù)組元素,數(shù)組元素的類型稱為數(shù)組類型,數(shù)組類型可以是C#中定義的任意類型,其中也包括數(shù)組類型本身。如果一個(gè)數(shù)組的類型不是數(shù)組類型,稱之為一維數(shù)組。如果數(shù)組

39、元素的類型是數(shù)組類型,就稱之為多維數(shù)組,也就是說,數(shù)組定義可以嵌套。,2020/7/4,54,C#程序設(shè)計(jì)實(shí)用教程,7.2.1數(shù)組的概念,無論是一維數(shù)組還是多維數(shù)組,每個(gè)維的下標(biāo)都是從0開始,結(jié)束于這個(gè)維的數(shù)組長度減1。數(shù)組被用于各種目的,因?yàn)樗峁┝艘环N高效、方便的手段將相同類型的變量合成一組。例如,可以用數(shù)組保存一個(gè)月中每天的溫度記錄,貨物平均價(jià)格的記錄。數(shù)組的主要優(yōu)點(diǎn)是,通過這樣的一種方式組織數(shù)據(jù)使得數(shù)據(jù)容易被操縱。例如,有一個(gè)數(shù)組,它包括選定的一組學(xué)生的數(shù)學(xué)成績,操作該數(shù)組,很容易計(jì)算其平均數(shù)學(xué)成績。而且數(shù)據(jù)以這樣的方式組織數(shù)據(jù),會很容易實(shí)現(xiàn)對數(shù)據(jù)的排序。,2020/7/4,55,C#

40、程序設(shè)計(jì)實(shí)用教程,7.2.1數(shù)組的概念,在實(shí)際使用數(shù)據(jù)的過程中,一般是先確定數(shù)據(jù)類型,然后根據(jù)實(shí)際情況確定數(shù)組的長度。C#中的數(shù)組是由System.Array類派生而來的引用對象,因此可以使用Array類的方法來進(jìn)行各種操作。,2020/7/4,56,C#程序設(shè)計(jì)實(shí)用教程,7.2.2System.Array類,System.Array類是C#中各種數(shù)組的基類,其常用屬性和方法的簡單說明如表7-1所示。,2020/7/4,57,C#程序設(shè)計(jì)實(shí)用教程,7.2.3一維數(shù)組,1.一維數(shù)組的定義數(shù)據(jù)在使用前使用先進(jìn)行定義。定義一維數(shù)組的格式如下:數(shù)據(jù)類型數(shù)組名:例如:charcharArr;/定義了一個(gè)

41、字符型的一維數(shù)組intintArr;/定義了一個(gè)整型一維數(shù)組stringstrArr;/定義了一個(gè)字符串類型一維數(shù)組初始化數(shù)組有兩種方法,即動態(tài)初始化和靜態(tài)初始化。,2020/7/4,58,C#程序設(shè)計(jì)實(shí)用教程,7.2.3一維數(shù)組,2.動態(tài)初始化動態(tài)初始化需要借助new運(yùn)算符,為數(shù)組元素分配內(nèi)存空間,并為數(shù)據(jù)元素賦初始值。動態(tài)初始化數(shù)組的格式如下:數(shù)組名=new數(shù)據(jù)類型數(shù)組長度;在C#中,可以將數(shù)組定義與動態(tài)初始化合在一起,格式如下:數(shù)據(jù)類型數(shù)組名=new數(shù)據(jù)類型數(shù)組長度;intintArr=newint5;intintArr=newint53,6,9,2,10;intintArr=newin

42、t3,6,9,2,10;,2020/7/4,59,C#程序設(shè)計(jì)實(shí)用教程,7.2.3一維數(shù)組,3.靜態(tài)初始化靜態(tài)初始化數(shù)組時(shí),必須與數(shù)組定義結(jié)合在一起,否則程序就會報(bào)錯(cuò)。靜態(tài)初始化數(shù)組的格式如下:數(shù)據(jù)類型數(shù)據(jù)名=元素1,元素2;例如:intintArr=3,6,9,2,10;stringstr=“English”,”Maths”,”Computer”,”Chinese”;,2020/7/4,60,C#程序設(shè)計(jì)實(shí)用教程,7.2.3一維數(shù)組,4.關(guān)于一維數(shù)據(jù)初始化的幾點(diǎn)說明(1)動態(tài)初始化數(shù)組時(shí),可以把定義與初始化分開在不同的語句中者,例如:intintArr;/定義數(shù)組intArr=newint5

43、;/動態(tài)初始化,初始化元素的值均為0或者intArr=newint53,6,9,2,10;,2020/7/4,61,C#程序設(shè)計(jì)實(shí)用教程,7.2.3一維數(shù)組,4.關(guān)于一維數(shù)據(jù)初始化的幾點(diǎn)說明(2)靜態(tài)初始化數(shù)組必須與數(shù)組結(jié)合在一條語句中,否則程序就會出錯(cuò)。intintArr=3,6,9,2,10;(3)在數(shù)組初始化語句中,如果大括號中已明確列出了數(shù)組中的元素,即確定了元素個(gè)數(shù),則表示數(shù)組元素個(gè)數(shù)的數(shù)值(即方括號中的數(shù)值)必須是常量,并且該數(shù)值必須與數(shù)組元素個(gè)數(shù)一致。intintArr=newint53,6,9,2,10;,2020/7/4,62,C#程序設(shè)計(jì)實(shí)用教程,7.2.3一維數(shù)組,5.訪

44、問一維數(shù)組中的元素在C#中是通過數(shù)組名和下標(biāo)值來訪問數(shù)組元素的。在訪問數(shù)組元素時(shí),其下標(biāo)可以是一個(gè)整型常量或整型表達(dá)式。例如,下面的數(shù)組元素的下標(biāo)都是合法的:intArr3,strArr0,intArrj,strArr2*i-1,2020/7/4,63,C#程序設(shè)計(jì)實(shí)用教程,7.2.3一維數(shù)組,【例7-1】給定8個(gè)數(shù):8、7、6、5、4、3、2、1,將這些數(shù)存在數(shù)組中,并將其按從小到大的順序輸出。(1)定義一個(gè)數(shù)組,如數(shù)組名為QueArrey,并將其用給定的數(shù)進(jìn)行初始化。(2)遍歷數(shù)組,將8個(gè)數(shù)中最小的數(shù)找出來,與第個(gè)位置上的數(shù)對調(diào)。其方法是:先找出存放最小的數(shù)組元素的下標(biāo),將其存放在變量te

45、mp中,然后將QueArray0和QueArraytemp中的數(shù)對調(diào),使QueArray0中存放的是個(gè)數(shù)中最小的數(shù)。(3)再從第個(gè)數(shù)到第個(gè)數(shù)中找出最小的數(shù),并按步驟(2)中的方法,將最小的數(shù)與第個(gè)位置上的數(shù)對調(diào),使QueArray1中存放的是第2小的數(shù)。(4)依次類推,完成整個(gè)排序過程,并輸出結(jié)果。,2020/7/4,64,C#程序設(shè)計(jì)實(shí)用教程,7.2.3一維數(shù)組,程序代碼如下:usingSystem;namespaceArraySortclassArraySortstaticvoidMain()inti,j,temp,m;intQueArray=newint8,7,6,5,4,3,2,1;f

46、or(j=0;jQueArray.Length;j+)temp=j;,2020/7/4,65,C#程序設(shè)計(jì)實(shí)用教程,7.2.3一維數(shù)組,for(i=j+1;iQueArray.Length;i+)/從j的下一個(gè)元素起開始比較if(QueArrayiQueArraytemp)/比較數(shù)組元素temp=i;/使temp為較小的數(shù)的下標(biāo)if(temp!=j)/*交換QueArraytemp和QueArrayj的值,從而可以從所比較的數(shù)組元素中獲得較小的婁賦給QueArrayj*/m=QueArrayj;QueArrayj=QueArraytemp;QueArraytemp=m;,2020/7/4,66

47、,C#程序設(shè)計(jì)實(shí)用教程,7.2.3一維數(shù)組,Console.WriteLine(輸出排序后的結(jié)果:);for(j=0;jQueArray.Length;j+)Console.Write(0,QueArrayj);,執(zhí)行該程序后,程序輸出結(jié)果如下:12345678,2020/7/4,67,C#程序設(shè)計(jì)實(shí)用教程,7.2.3一維數(shù)組,注意:(1)除了可以顯式地指出數(shù)組長度之外,更好的做法是使用System.Array類的Length屬性,數(shù)組的Length用于獲取數(shù)組所包含的全部元素的個(gè)數(shù)。(2)上面所用的排序方法是一種常規(guī)的方法,在C#中,對數(shù)組進(jìn)行排序還有更高效的方法;可以使用Array類的So

48、rt方法完成這個(gè)功能。Sort方法有多種的重載方法,常用的形式如下:publicstaticvoidSort(Arrayarray);,2020/7/4,68,C#程序設(shè)計(jì)實(shí)用教程,7.2.3一維數(shù)組,【例7-2】給定8個(gè)數(shù):8、7、6、5、4、3、2、1,將這些數(shù)存在數(shù)組中,利用Array類的Sort方法將其按從小到大的順序輸出。usingSystem;namespaceSortArrayclassSortArraystaticvoidMain()intQueArray=newint8,7,6,5,4,3,2,1;/定義數(shù)組/輸出原始數(shù)組Console.WriteLine(原始數(shù)組:);fo

49、r(inti=0;i,QueArrayi);Console.WriteLine();/進(jìn)行換行Array.Sort(QueArray);/對數(shù)組排序/輸出排序后的數(shù)組Console.WriteLine(排序以后的數(shù)組:);for(inti=0;i,QueArrayi);,2020/7/4,69,C#程序設(shè)計(jì)實(shí)用教程,7.2.3一維數(shù)組,for(inti=0;i,QueArrayi);Console.WriteLine();/進(jìn)行換行Array.Sort(QueArray);/對數(shù)組排序/輸出排序后的數(shù)組Console.WriteLine(排序以后的數(shù)組:);for(inti=0;i,QueAr

50、rayi);,2020/7/4,70,C#程序設(shè)計(jì)實(shí)用教程,7.2.3一維數(shù)組,6.查找元素在數(shù)組中查找元素,一是從整個(gè)數(shù)組中尋找到與給定值相同的元素來,可以使用Array類的BinarySearch方法完成這個(gè)功能。二是判定數(shù)組中是否含有一個(gè)特定的元素,可以用Contains方法來實(shí)現(xiàn)。(1)BinarySearch方法BinarySearch使用二進(jìn)制搜索算法在一維的排序Array中搜索算法,注意必須是已經(jīng)排序的數(shù)組。如果找到給定的值,則返回其下標(biāo);否則,返回一個(gè)負(fù)整數(shù)。常用形式如下:publicstaticintBinarySearch(Arrayarray,objectvalue);其

51、中,參數(shù)array為待搜索的數(shù)組,value為待尋找的元素值。,2020/7/4,71,C#程序設(shè)計(jì)實(shí)用教程,7.2.3一維數(shù)組,【例7-3】給定8個(gè)數(shù):8、7、6、5、4、3、2、1,將這些數(shù)存在數(shù)組中,利用Array類的BinarySearch方法返回其中的元素5的下標(biāo)。usingSystem;namespaceBinarySearchclassBinarySearchstaticvoidMain()/定義數(shù)組intmyArr=8,7,6,5,4,3,2,1;/對數(shù)組排序Array.Sort(myArr);,2020/7/4,72,C#程序設(shè)計(jì)實(shí)用教程,7.2.3一維數(shù)組,/搜索intta

52、rget=5;intresult=Array.BinarySearch(myArr,target);/4Console.WriteLine(0的下標(biāo)為1,target,result);/4Console.ReadLine();,2020/7/4,73,C#程序設(shè)計(jì)實(shí)用教程,7.2.3一維數(shù)組,(2)Contains方法Contains方法可以確定某個(gè)特定值的否包含在數(shù)組中,返回一個(gè)bool值。Array類的這個(gè)方法實(shí)際上是對IList接口中方法的實(shí)現(xiàn),常用形式如下:boolIList.Contains(objectvalue);其中,參數(shù)value代表所要驗(yàn)證的元素值。,2020/7/4,74

53、,C#程序設(shè)計(jì)實(shí)用教程,7.2.3一維數(shù)組,7.把數(shù)組作為參數(shù)將數(shù)組作為參數(shù)傳遞可以將初始化的數(shù)組傳遞給方法。例如:intmyArray=newint1,3,5,7,9;PrintArray(myArray);也可以直接將一個(gè)初始化過的數(shù)組作為參數(shù)進(jìn)行傳遞。例如下面的代碼等價(jià)于上面數(shù)組傳遞。PrintArray(newint1,3,5,7,9);,2020/7/4,75,C#程序設(shè)計(jì)實(shí)用教程,7.2.3一維數(shù)組,【例7-5】演示把一個(gè)初始化后字符串?dāng)?shù)組作為參數(shù)傳遞給PrintArray方法。usingSystem;namespaceParameterclassParameterstaticvo

54、idPrintArray(stringstrArr)for(inti=0;istrArr.Length;i+)Console.Write(0,strArri);Console.WriteLine();,2020/7/4,76,C#程序設(shè)計(jì)實(shí)用教程,7.2.3一維數(shù)組,staticvoidMain()stringWeekDays=newstring星期日,星期一,星期二,星期三,星期四,星期五,星期六;PrintArray(WeekDays);/把數(shù)組作為參數(shù)在上面的例子中,主函數(shù)Main把定義好的數(shù)組WeekDays作為參數(shù)傳遞給方法PrintArray,PrintArray方法把接收到的數(shù)組

55、元素一個(gè)個(gè)地打印出來。,2020/7/4,77,C#程序設(shè)計(jì)實(shí)用教程,7.2.4二維數(shù)組,在C#中,多維數(shù)組可看作是數(shù)組的數(shù)組,即高維數(shù)組。多維數(shù)組中的每一個(gè)元素本身也是一個(gè)低維數(shù)組,因此多維數(shù)組的定義、初始化和元素訪問與一維數(shù)組都非常相似。在多維數(shù)組中,二維數(shù)組是最簡單也是最常用的數(shù)組,本節(jié)主要介紹二維數(shù)組。,2020/7/4,78,C#程序設(shè)計(jì)實(shí)用教程,7.2.4二維數(shù)組,.二維數(shù)組的定義二維數(shù)組的一般語法格式如下:數(shù)據(jù)類型,數(shù)組名例如:char,charArr;/定義一個(gè)字符型二維數(shù)組int,intArr;/定義一個(gè)整型二維數(shù)組,2020/7/4,79,C#程序設(shè)計(jì)實(shí)用教程,7.2.4二

56、維數(shù)組,定義多維數(shù)組與二維數(shù)組的方法相同,只是要根據(jù)定義數(shù)組的維數(shù)確定方括號中的逗號的個(gè)數(shù),一般定義一個(gè)n(n2)維數(shù)組,需要的逗號個(gè)數(shù)是n-1。例如,下面語句定義的是一個(gè)三維數(shù)組:String,stringArr;/定義一個(gè)字符串型三維數(shù)組,2020/7/4,80,C#程序設(shè)計(jì)實(shí)用教程,7.2.4二維數(shù)組,2.二維數(shù)組的初始化二維數(shù)組包括兩種初始化方法,即:動態(tài)初始化和靜態(tài)初始化。動態(tài)初始化二維數(shù)組的格式如下:數(shù)組名=new數(shù)據(jù)類型數(shù)組長度,數(shù)組長度2;其中,數(shù)組長度1和數(shù)組長度2可以是整型的常量或變量,它們分別表示數(shù)組第一維和第二維的長度。,2020/7/4,81,C#程序設(shè)計(jì)實(shí)用教程,7

57、.2.4二維數(shù)組,也可以將二維數(shù)組的定義與動態(tài)初始化合并在一條語句中,格式如下:數(shù)據(jù)類型,數(shù)組名=new數(shù)據(jù)類型數(shù)組長度,數(shù)組長度2;例如:int,intArr=newint3,2;上例中new運(yùn)算符用于創(chuàng)建數(shù)組,并默認(rèn)對數(shù)組元素進(jìn)行初始化。在上例中,所有數(shù)組元素的值都被初始化為0。,2020/7/4,82,C#程序設(shè)計(jì)實(shí)用教程,7.2.4二維數(shù)組,int,intArr=newint3,2;上面的語句定義一個(gè)二維數(shù)組,其中第維的長度為3,第2維的長度為2。在二維數(shù)組中,第1維常常稱為行,第2維也稱為列。這樣,一個(gè)二維數(shù)組就同一個(gè)二維表格相對應(yīng)起來了??梢赃@樣理解二維數(shù)組:如果只給出二維數(shù)組的第

58、1維下標(biāo),以一維數(shù)組來看二維數(shù)組,則這樣的數(shù)組中所代表的是另一個(gè)一維數(shù)組。,2020/7/4,83,C#程序設(shè)計(jì)實(shí)用教程,7.2.4二維數(shù)組,在動態(tài)初始化二維數(shù)組時(shí),也可以直接為其賦予初始化值,如下所示:int,intArr=newint,1,2,3,4,5,6;它表示的數(shù)組元素的值如表7-2所示。,2020/7/4,84,C#程序設(shè)計(jì)實(shí)用教程,7.2.4二維數(shù)組,二維數(shù)組可以進(jìn)行靜態(tài)初始化。例如,下面的語句定義一個(gè)2行3列的double類型二維數(shù)組,并對其進(jìn)行靜態(tài)初始化。double,doubleArr=1.2,2.3,3.4,4.5,5.6,6.7;靜態(tài)初始化二維數(shù)組時(shí),也必須與數(shù)組定義結(jié)

59、合在一條語句中,否則程序就會報(bào)錯(cuò)。,2020/7/4,85,C#程序設(shè)計(jì)實(shí)用教程,7.2.4二維數(shù)組,3.訪問二維數(shù)組的元素二維數(shù)組也是通過數(shù)組名和下標(biāo)值來訪問數(shù)組元素的,二維數(shù)組的下標(biāo)值也是從0開始的。與一維數(shù)組不同的是,二維數(shù)組需要兩個(gè)下標(biāo)才能唯一標(biāo)識一個(gè)數(shù)組元素,其中第個(gè)下標(biāo)該元素所在的行,第2個(gè)下標(biāo)表示該元素所在的列。如intArr2,0代表數(shù)組名為intArr的二維數(shù)組中位于第3行、第1列的元素。根據(jù)二維數(shù)組的特點(diǎn),訪問二維數(shù)組中的元素通常需要一個(gè)二重循環(huán)。,2020/7/4,86,C#程序設(shè)計(jì)實(shí)用教程,7.2.4二維數(shù)組,【例7-6】通過二重循環(huán),將1到16的數(shù)賦給二維數(shù)組,然后顯示數(shù)組的內(nèi)容。程序代碼如下:usingSystem;namespaceTwoArrclassTwoArrstaticvoidMain()inti,j;,2020/7/4,87,C#程序設(shè)計(jì)實(shí)用教程,7.2.4二維數(shù)組,int,intTwoArray=newint4,4;for(i=0;i4;i+)for(j=0;j4;+j)intTwoArrayi,j=(i*4)+j+1;Console.Write(in

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論