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

下載本文檔

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

文檔簡(jiǎn)介

第7章常用數(shù)據(jù)結(jié)構(gòu)與算法數(shù)據(jù)結(jié)構(gòu)和算法是程序設(shè)計(jì)的基石。本章重點(diǎn)講述C#中的幾個(gè)主要的數(shù)據(jù)結(jié)構(gòu)類型:字符串、數(shù)組和枚舉。本章還將介紹一些常用算法,如幾種典型排序算法的C#實(shí)現(xiàn)。2024/1/132C#程序設(shè)計(jì)實(shí)用教程

7.1字符串

字符串是應(yīng)用程序和用戶交互的主要方式之一。.NET提供了幾個(gè)類來(lái)快速實(shí)現(xiàn)字符串操作,包括String、StringBuilder等。2024/1/133C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

System.String是最常用的字符串操作類。下面從各個(gè)應(yīng)用的角度對(duì)String類進(jìn)行詳細(xì)的介紹。1.比較字符串比較字符串是指按照字典排序規(guī)那么,判定兩個(gè)字符的相對(duì)大小。在String類中,常用的比較字符串的方法包括Compare、CompareTo、CompareOrdinal以及Equals。2024/1/134C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

〔1〕Compare方法Compare方法是String類的靜態(tài)方法,用于全面比較兩個(gè)字符串對(duì)象。下面使用Compare方法來(lái)比較兩個(gè)字符串,輸出結(jié)果如注釋語(yǔ)句所示。//定義兩個(gè)String對(duì)象,并對(duì)其賦值System.StringstrA="Hello";System.StringstrB="World"; 2024/1/135C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

//CompareConsole.WriteLine(String.Compare(strA,strB)); //-1Console.WriteLine(String.Compare(strA,strA)); //0Console.WriteLine(String.Compare(strB,strA)); //12024/1/136C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

〔2〕CompareTo方法CompareTo方法將當(dāng)前字符串對(duì)象與另一個(gè)對(duì)象做比較,其作用與Compare類似,返回值也相同。CompareTo與Compare相比,區(qū)別在于:CompareTo不是靜態(tài)方法,可以通過(guò)一個(gè)String對(duì)象調(diào)用;CompareTo沒(méi)有重載形式,只能按照大小寫(xiě)敏感方式比較兩個(gè)整串。2024/1/137C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

CompareTo方法的使用如下代碼所示:

//定義兩個(gè)String對(duì)象,并對(duì)其賦值

System.StringstrA="Hello";System.StringstrB="World";

//CompareToConsole.WriteLine(strA.CompareTo(strB)); //-12024/1/138C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

〔3〕Equals方法Equals方法用于方便地判定兩個(gè)字符串是否相同,有兩種重載形式:publicboolEquals(string)publicstaticboolEquals(string,string)如果兩個(gè)字符串相等,Equals()返回值為T(mén)rue;否那么,返回False。Equals方法的使用如下代碼所示://EqualsConsole.WriteLine(String.Equals(strA,strB)); //falseConsole.WriteLine(strA.Equals(strB)); //false2024/1/139C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

〔4〕比較運(yùn)算符String支持兩個(gè)比較運(yùn)算符“==〞、“!=〞,分別用于判定兩個(gè)字符是否相等和不等,并區(qū)分大小寫(xiě)。下例中,使用“==〞、“!=〞對(duì)“Hello〞和“World〞進(jìn)行比較。//==和!=Console.WriteLine(strA==strB); //falseConsole.WriteLine(strA!=strB); //true2024/1/1310C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

2.定位字符和子串定位子串是指在一個(gè)字符串尋找其中包含的子串或者某個(gè)字符,在String類中,常用的定位子串和字符的方法包括StartWith/EndsWith、IndexOf/LastIndexOf以及IndexOfAny/LastIndexOf。

2024/1/1311C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

〔1〕StartWith/EndsWith方法StartWith方法可以判定一個(gè)字符串對(duì)象是否以另一個(gè)子字符串開(kāi)頭,如果是返回True;否那么返回False。其定義為: publicboolStartsWith(stringvalue)其中,參數(shù)value即待判定的子字符串。//StartWithConsole.WriteLine(strA.StartsWith("He"));//trueConsole.WriteLine(strA.StartsWith("She"));//false另外,EndsWith方法可以判定一個(gè)字符是否以另一個(gè)子字符串結(jié)尾。2024/1/1312C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

〔2〕IndexOf/LastIndexOf方法IndexOf方法用于搜索一個(gè)字符串,某個(gè)特定的字符或子串第一次出現(xiàn)的位置,該方法區(qū)分大小寫(xiě),并從字符串的首字符開(kāi)始以0計(jì)數(shù)。如果字符串中不包含這個(gè)字符或子串,那么返回-1。定位字符:intIndexOf(charvalue)intIndexOf(charvalue,intstartIndex)intIndexOf(charvalue,intstartIndex,intcount)2024/1/1313C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

定位子串:

intIndexOf(stringvalue)intIndexOf(stringvalue,intstartIndex)intIndexOf(stringvalue,intstartIndex,intcount)在上述重載形式中,其參數(shù)含義如下:

Value:待定位的字符或者子串。

startIndex:在總串中開(kāi)始搜索的起始位置。

Count:在總串中從起始位置開(kāi)始搜索的字符數(shù)。

2024/1/1314C#程序設(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相同。2024/1/1315C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

〔3〕IndexOfAny/LastIndexOfAnyIndexOfAny方法功能同IndexOf類似,區(qū)別在于,可以搜索在一個(gè)字符串中,出現(xiàn)在一個(gè)字符數(shù)組中的任意字符第一次出現(xiàn)的位置。2024/1/1316C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

下例在“Hello〞中尋找字符“l(fā)〞第一次和最后一次出現(xiàn)的位置。//IndexofAny|LastIndexOfAnychar[]anyOf={'H','e','l'};Console.WriteLine(strA.IndexOfAny(anyOf)); //0Console.WriteLine(strA.LastIndexOfAny(anyOf)); //3同IndexOfAny類似,LastIndexOfAny用于搜索在一個(gè)字符串中,出現(xiàn)在一個(gè)字符數(shù)組中任意字符最后一次出現(xiàn)的位置。2024/1/1317C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

3.格式化字符串Format方法用于創(chuàng)立格式化的字符串以及連接多個(gè)字符串對(duì)象。Foramt方法也有多個(gè)重載形式,最常用的為:publicstaticstringFormat(stringformat,paramsobject[]args);其中,參數(shù)format用于指定返回字符串的格式,而args為一系列變量參數(shù)。

2024/1/1318C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

//FormatnewStr="";newStr=String.Format("{0},{1}!",strA,strB);Console.WriteLine(newStr); //Hello,World!在format參數(shù)中包含一些用大括號(hào)括起來(lái)的數(shù)字,如{0}、{1},這些數(shù)字分別一一對(duì)應(yīng)于args參數(shù)數(shù)組中的變量。在生成結(jié)果字符串時(shí),將使用這些變量代替{i}。需要說(shuō)明的是,這些變量并不要求必須為String類型。

2024/1/1319C#程序設(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); //形如:2023-09-19其中,格式字符串“yyyy-MM-dd〞指定返回時(shí)間的格式形如“2023-09-19〞。2024/1/1320C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

4.連接字符串〔1〕Concat方法Concat方法用于連接兩個(gè)或多個(gè)字符串//ConcatnewStr="";newStr=String.Concat(strA,"",strB);Console.WriteLine(newStr); //“HelloWorld"2024/1/1321C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

〔2〕Join方法Join方法利用一個(gè)字符數(shù)組和一個(gè)分隔符串構(gòu)造新的字符串。常用于把多個(gè)字符串連接在一起,并用一個(gè)特殊的符號(hào)來(lái)分隔開(kāi)。Join方法的常用形式為:publicstaticstringJoin(stringseparator,string[]values);其中,參數(shù)separator為指定的分隔符,而values用于指定所要連接的多個(gè)字符串?dāng)?shù)組。2024/1/1322C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

下例用“^^〞分隔符把“Hello〞和“World〞連起來(lái)。//JoinnewStr="";String[]strArr={strA,strB};newStr=String.Join("^^",strArr);Console.WriteLine(newStr); //"Hello^^World"2024/1/1323C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

〔3〕連接運(yùn)算符“+〞String支持連接運(yùn)算符“+〞,可以方便地連接多個(gè)字符串。例如,下例把“Hello〞和“World〞連接起來(lái)。//+newStr="";newStr=strA+strB;Console.WriteLine(newStr); //"HelloWorld"2024/1/1324C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

5.分隔字符串使用Split方法可以把一個(gè)整串,按照某個(gè)分隔符,分裂成一系列小的字符串。例如,把整串,按照某個(gè)分隔符,分裂成一系列小的字符串。例如,把整串“Hello^^World〞按照字符“^〞進(jìn)行分裂,可以得到3個(gè)小的字符串,即“Hello〞、“〞〔空串〕和“World〞。Split方法最常用的形式為:publicstring[]Split(paramschar[]separator);其中,參數(shù)separator數(shù)組包含分隔符。2024/1/1325C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

//SplitnewStr="Hello^^World";char[]separator={'^'};String[]splitStrings=newString[100];splitStrings=newStr.Split(separator);inti=0;while(i<splitStrings.Length){ Console.WriteLine("item{0}:{1}",i,splitStrings[i]); i++;}輸出結(jié)果如下:

Item0:HelloItem1:Item2:World2024/1/1326C#程序設(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用于指定所要插入的位置,從0開(kāi)始索引;value指定所要插入的字符串。2024/1/1327C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

下例中,在“Hello〞的字符“H〞后面插入“World〞,構(gòu)造一個(gè)串“HWorldello〞。//InsertnewStr="";newStr=strA.Insert(1,strB);Console.WriteLine(newStr); //"HWorldello"2024/1/1328C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

7.刪除和剪切字符串String類包含了刪除一個(gè)字符串的方法??梢杂肦emove方法在任意位置刪除任意長(zhǎng)度的字符。也可以使用Trim/TrimeEnd/TrimStart方法剪切掉字符串中的一些特定字符。

2024/1/1329C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

〔1〕Remove方法Remove方法從一個(gè)字符串的指定位置開(kāi)始,刪除指定數(shù)量的字符。最常用的形式為:publicstringRemove(intstartIndex,intcount);其中,參數(shù)startIndex用于指定開(kāi)始刪除的位置,從0開(kāi)始索引;count指定刪除的字符數(shù)量。下例中,把“Hello〞中的“ell〞刪掉。//RemovenewStr="";newStr=strA.Remove(1,3);Console.WriteLine(newStr); //"Ho"2024/1/1330C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

〔2〕Trim/TrimStart/TrimEnd方法假設(shè)想把一個(gè)字符串首尾處的一些特殊字符剪切掉,如去掉一個(gè)字符串首尾的空格等,可以使用String的Trim()方法。其形式如下: publicstringTrim() publicstringTrim(paramschar[]trimChars)其中,參數(shù)trimChars數(shù)組包含了指定要去掉的字符,如果缺省,那么刪除空格符號(hào)。下例中,實(shí)現(xiàn)了對(duì)“@Hello#$〞的凈化,去掉首尾的特殊符號(hào)。2024/1/1331C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

//TrimnewStr="";char[]trimChars={'@','#','$',''};StringstrC="@Hello#$";newStr=strC.Trim(trimChars);Console.WriteLine(newStr); //"Hello"另外,同Trim類似,TrimStart和TrimEnd分別剪切掉一個(gè)字符串開(kāi)頭和結(jié)尾處的特殊字符。

2024/1/1332C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

8.復(fù)制字符串String類包括了復(fù)制字符串方法Copy和CopyTo,可以完成對(duì)一個(gè)字符串及其一局部的復(fù)制操作。2024/1/1333C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

〔1〕Copy方法假設(shè)想把一個(gè)字符串復(fù)制到另一個(gè)字符數(shù)組中,可以使用String的靜態(tài)方法Copy來(lái)實(shí)現(xiàn),其形式為:publicstringCopy(stringstr);其中,參數(shù)str為需要復(fù)制的源字符串,方法返回目標(biāo)字符串。下例中,把strA字符串“Hello〞復(fù)制到newStr中。//CopynewStr="";newStr=String.Copy(strA);Console.WriteLine(newStr); //"Hello"2024/1/1334C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

〔2〕CopyTo方法CopyTo方法可以實(shí)現(xiàn)Copy同樣的功能,但功能更為豐富,可以復(fù)制字符串的一局部到一個(gè)字符數(shù)組中。其形式為:publicvoidCopyTo(intsourceIndex,char[]destination,intdestinationIndex,intcount);其中,參數(shù)sourceIndex為需要復(fù)制的字符起始位置,destination為目標(biāo)字符數(shù)組,destinationIndex指定目標(biāo)數(shù)組中的開(kāi)始存放位置,而count指定要復(fù)制的字符個(gè)數(shù)。2024/1/1335C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

下例中,把strA字符串“Hello〞中的“ell〞復(fù)制到newCharArr中,并在newCharArr中從第2個(gè)元素開(kāi)始存放。//CopyTochar[]newCharArr=newchar[100];strA.CopyTo(2,newCharArr,0,3);Console.WriteLine(newCharArr); //〞llo"2024/1/1336C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

9.替換字符串想要替換一個(gè)字符串中的某些特定字符或者某個(gè)子串,可以使用Replace方法來(lái)實(shí)現(xiàn),其形式為:publicstringReplace(charoldChar,charnewChar);publicstringReplace(stringoldValue,stringnewValue);其中,參數(shù)oldChar和oldValue為待替換的字符和子串,而newChar和newValue為替換后的新字符和新子串。下例把“Hello〞通過(guò)替換變?yōu)椤癏ero〞。//ReplacenewStr=strA.Replace("ll","r"); Console.WriteLine(newStr); //Hero2024/1/1337C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

10.更改大小寫(xiě)String提供了方便轉(zhuǎn)換字符串中所有字符大小寫(xiě)的方法ToUpper和ToLower。下例首先把“Hello〞轉(zhuǎn)換為“HELLO〞,然后再變?yōu)樾?xiě)形式“hello〞。//ToUpper|ToLowernewStr=strA.ToUpper(); Console.WriteLine(newStr); //HELLOnewStr=strA.ToLower();Console.WriteLine(newStr); //hello2024/1/1338C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

補(bǔ)充:提取子串利用字符串的提取子串方法Substring,就可從一個(gè)字符串中得到子字符串。Substring方法有兩個(gè)參數(shù),第一個(gè)參數(shù)指出從第幾個(gè)位置開(kāi)始截取,第二個(gè)參數(shù)指出共提取幾個(gè)字符。截取以后的子串是另外一個(gè)字符串,而不是原來(lái)的字符串截短,原來(lái)的字符串不變。2024/1/1339C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

usingSystem;classSubString{publicstaticvoidMain()

{stringstrOriginal="IlovesChina!";stringstrSub=strOriginal.Substring(2,12);Console.WriteLine("strOriginal:"+strOriginal);Console.WriteLine("strSub:"+strSub);stringstrTemp;for(inti=0;i<strOriginal.Length;i+=2)

{strTemp=strOriginal.Substring(i,1);Console.Write(strTemp);

}

}}2024/1/1340C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

程序運(yùn)行結(jié)果如下:2024/1/1341C#程序設(shè)計(jì)實(shí)用教程

7.1.1靜態(tài)字符串String

11.String小結(jié)本節(jié)介紹了最常用的String類,并從比較、定位子串、格式化、連接、分裂、插入、刪除、復(fù)制、大小寫(xiě)轉(zhuǎn)換10個(gè)方面介紹了其方法和應(yīng)用。之所以稱String對(duì)象為靜態(tài)串,是因?yàn)橐坏┒x一個(gè)String對(duì)象,就是不可改變的。在使用其方法〔如插入、刪除操作〕時(shí),都要在內(nèi)存中創(chuàng)立一個(gè)新的String對(duì)象,而不是在原對(duì)象的根底上進(jìn)行修改,這就需要開(kāi)辟新的內(nèi)存空間。如果需要經(jīng)常進(jìn)行串修改操作,使用String類無(wú)疑是非常消耗資源的,這時(shí)需要使用StringBuilder類。2024/1/1342C#程序設(shè)計(jì)實(shí)用教程

7.1.2動(dòng)態(tài)字符串StringBuilder

與String類相比,類可以實(shí)現(xiàn)動(dòng)態(tài)字符串。此外,動(dòng)態(tài)的含義是指在修改字符串時(shí),系統(tǒng)不需要?jiǎng)?chuàng)立新的對(duì)象,不會(huì)重復(fù)開(kāi)辟新的內(nèi)存空間,而是直接在原StringBuilder對(duì)象的根底上進(jìn)行修改。2024/1/1343C#程序設(shè)計(jì)實(shí)用教程

7.1.2動(dòng)態(tài)字符串StringBuilder

1.聲明StringBuilder串StringBuilder類位于命名空間System.Text中,使用時(shí),可以在文件頭通過(guò)using語(yǔ)句引入該命名空間:usingSystem.Text;聲明StringBuilder對(duì)象需要使用new關(guān)鍵字,并可以對(duì)其進(jìn)行初始化。如以下語(yǔ)句聲明了一個(gè)StringBuilder對(duì)象myStringBuilder,并初始化為“Hello〞: StringBuildermyStringBuilder=newStringBuilder("Hello");2024/1/1344C#程序設(shè)計(jì)實(shí)用教程

7.1.2動(dòng)態(tài)字符串StringBuilder

2.設(shè)置StringBuilder容量StringBuilder對(duì)象為動(dòng)態(tài)字符串,可以對(duì)其設(shè)置好的字符數(shù)量進(jìn)行擴(kuò)展。另外,還可以設(shè)置一個(gè)最大長(zhǎng)度,這個(gè)最大長(zhǎng)度稱為該StringBuilder對(duì)象的容量〔Capacity〕。2024/1/1345C#程序設(shè)計(jì)實(shí)用教程

7.1.2動(dòng)態(tài)字符串StringBuilder

有兩種方式來(lái)設(shè)置一個(gè)StringBuilder對(duì)象的容量?!?〕使用構(gòu)造函數(shù)StringBuilder構(gòu)造函數(shù)可以接受容量參數(shù),例如,下面聲明一個(gè)StringBuilder對(duì)象sb2,并設(shè)置其容量為100。//使用構(gòu)造函數(shù)StringBuildersb2=newStringBuilder("Hello",100);2024/1/1346C#程序設(shè)計(jì)實(shí)用教程

7.1.2動(dòng)態(tài)字符串StringBuilder

〔2〕使用Capacity讀/寫(xiě)屬性Capacity屬性指定StringBuilder對(duì)象的容量。例如下面語(yǔ)句首先一個(gè)StringBuilder對(duì)象sb3,然后利用Capacity屬性設(shè)置其容量為100。//使用Capacity屬性StringBuildersb3=newStringBuilder("Hello");sb3.Capacity=100;2024/1/1347C#程序設(shè)計(jì)實(shí)用教程

7.1.2動(dòng)態(tài)字符串StringBuilder

3.追加操作追加一個(gè)StringBuilder是指將新的字符串添加到當(dāng)前StringBuilder字符串的結(jié)尾處,可以使用Append和AppendFormat來(lái)實(shí)現(xiàn)這個(gè)功能。〔1〕Append方法下例中,把一個(gè)StringBuilder字符串“Hello〞追加為“HelloWorld!〞。//AppendStringBuildersb4=newStringBuilder("Hello");sb4.Append("World!");Console.WriteLine(sb4); //"HelloWorld!"2024/1/1348C#程序設(shè)計(jì)實(shí)用教程

7.1.2動(dòng)態(tài)字符串StringBuilder

〔2〕AppendFormat方法AppendFormat方法可以實(shí)現(xiàn)對(duì)追加局部字符串的格式化,可以定義變量的格式,并將格式化后的字符串追加在StringBuilder后面。2024/1/1349C#程序設(shè)計(jì)實(shí)用教程

7.1.2動(dòng)態(tài)字符串StringBuilder

4.插入操作StringBuilder的插入操作是指將新的字符串插入到當(dāng)前的StringBuilder字符串的指定位置,如“Hello〞變?yōu)椤癏eeeello〞??梢允褂肧tringBuilder類的Insert方法來(lái)實(shí)現(xiàn)這個(gè)功能,常用形式為:publicStringBuilderInsert(intindex,objectvalue);其中,參數(shù)index指定所要插入的位置,并從0開(kāi)始索引,如index=1,那么會(huì)在原字符串的第2個(gè)字符之前進(jìn)行插入操作;同Append一樣,參數(shù)value并不僅是只可取字符串類型。2024/1/1350C#程序設(shè)計(jì)實(shí)用教程

7.1.2動(dòng)態(tài)字符串StringBuilder

下例中,把一個(gè)StringBuilder字符串“Hello〞通過(guò)插入操作修改為“Heeeello〞。//InsertStringBuildersb6=newStringBuilder("Hello");sb6.Insert(2,"eee");Console.WriteLine(sb6); //"Heeeello"2024/1/1351C#程序設(shè)計(jì)實(shí)用教程

7.1.2動(dòng)態(tài)字符串StringBuilder

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

7.1.2動(dòng)態(tài)字符串StringBuilder

下例中,把一個(gè)StringBuilder字符串“Heeeello〞通過(guò)刪除操作修改為“Hello〞。//RemoveStringBuildersb7=newStringBuilder("Heeello");sb7.Remove(2,2); //在〞He〞后面刪除個(gè)字符Console.WriteLine(sb7); //"Hello!"2024/1/1353C#程序設(shè)計(jì)實(shí)用教程

7.1.2動(dòng)態(tài)字符串StringBuilder

6.替換操作StringBuilder使用Replace方法來(lái)實(shí)現(xiàn)替換操作,例如把“Hello〞變?yōu)椤癏ero〞,就需要使用替換操作,將“l(fā)l〞替換為“r〞。這同String類的Replace方法非常類似,其常用形式包括:publicStringBuilderReplace(charoldChar,charnewChar);publicStringBuilderReplace(stringoldValue,stringnewValue);其中,參數(shù)oldChar和oldValue為待替換的字符和子串,而newChar和newValue為替換后的新字符和新子串。2024/1/1354C#程序設(shè)計(jì)實(shí)用教程

7.1.2動(dòng)態(tài)字符串StringBuilder

下例把“Hello〞通過(guò)替換為“Hero〞。//ReplaceStringBuildersb8=newStringBuilder("Hello");sb8=sb8.Replace("ll","r"); Console.WriteLine(sb8); //Hero2024/1/1355C#程序設(shè)計(jì)實(shí)用教程

7.1.2動(dòng)態(tài)字符串StringBuilder

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

7.2數(shù)組

數(shù)組的作用非常強(qiáng)大,數(shù)據(jù)也是根本數(shù)據(jù)結(jié)構(gòu)之一,是編程實(shí)現(xiàn)過(guò)程中必不可少的要素之一。2024/1/1357C#程序設(shè)計(jì)實(shí)用教程

7.2.1數(shù)組的概念

數(shù)組〔Array〕是一種數(shù)據(jù)結(jié)構(gòu),一個(gè)數(shù)組由假設(shè)干個(gè)類型相同的數(shù)組元素的變量,這些變量可以通過(guò)一個(gè)數(shù)組名和數(shù)組下標(biāo)〔或者稱為索引〕來(lái)訪問(wèn)。C#中的數(shù)組下標(biāo)是從零開(kāi)始,數(shù)組中的所在元素都具有相同的類型。在數(shù)組中,每一個(gè)成員叫做數(shù)組元素,數(shù)組元素的類型稱為數(shù)組類型,數(shù)組類型可以是C#中定義的任意類型,其中也包括數(shù)組類型本身。如果一個(gè)數(shù)組的類型不是數(shù)組類型,稱之為一維數(shù)組。如果數(shù)組元素的類型是數(shù)組類型,就稱之為多維數(shù)組,也就是說(shuō),數(shù)組定義可以嵌套。2024/1/1358C#程序設(shè)計(jì)實(shí)用教程

7.2.1數(shù)組的概念

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

7.2.1數(shù)組的概念

在實(shí)際使用數(shù)據(jù)的過(guò)程中,一般是先確定數(shù)據(jù)類型,然后根據(jù)實(shí)際情況確定數(shù)組的長(zhǎng)度。C#中的數(shù)組是由System.Array類派生而來(lái)的引用對(duì)象,因此可以使用Array類的方法來(lái)進(jìn)行各種操作。另外,數(shù)組常常用來(lái)實(shí)現(xiàn)靜態(tài)的操作,即不改變其空間大小,如查找、遍歷等。數(shù)組也可以實(shí)現(xiàn)動(dòng)態(tài)的操作、如插入、刪除等,但不推薦使用,而應(yīng)盡量使用集合來(lái)代替。2024/1/1360C#程序設(shè)計(jì)實(shí)用教程

7.2.2System.Array類

System.Array類是C#中各種數(shù)組的基類,其常用屬性和方法的簡(jiǎn)單說(shuō)明如表7-1所示。2024/1/1361C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

由具有一個(gè)下標(biāo)的數(shù)組元素所構(gòu)成的數(shù)組就是一維數(shù)組,一維數(shù)組是簡(jiǎn)單的數(shù)組。例如:為了記錄50個(gè)銀行儲(chǔ)蓄用戶的賬號(hào),就可以使用一個(gè)長(zhǎng)度為50的一維數(shù)組來(lái)處理。一維數(shù)組比較直觀,使用起來(lái)相對(duì)容易。2024/1/1362C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

1.一維數(shù)組的定義數(shù)據(jù)在使用前使用先進(jìn)行定義。定義一維數(shù)組的格式如下:

數(shù)據(jù)類型[]數(shù)組名:其中數(shù)組類型為各種數(shù)據(jù)類型,它表示數(shù)據(jù)元素的類型;數(shù)組名可以是C#合法的標(biāo)識(shí)符;在數(shù)組名與數(shù)據(jù)類型之間是一組空的方括號(hào)。例如:char[]charArr;//定義了一個(gè)字符型的一維數(shù)組int[]intArr;//定義了一個(gè)整型一維數(shù)組string[]strArr;//定義了一個(gè)字符串類型一維數(shù)組在定義數(shù)組后,必須對(duì)其進(jìn)行初始化才能使用;初始化數(shù)組有兩種方法,即動(dòng)態(tài)初始化和靜態(tài)初始化。2024/1/1363C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

2.動(dòng)態(tài)初始化動(dòng)態(tài)初始化需要借助new運(yùn)算符,為數(shù)組元素分配內(nèi)存空間,并為數(shù)據(jù)元素賦初始值。動(dòng)態(tài)初始化數(shù)組的格式如下:

數(shù)組名=new數(shù)據(jù)類型[數(shù)組長(zhǎng)度];在C#中,可以將數(shù)組定義與動(dòng)態(tài)初始化合在一起,格式如下:

數(shù)據(jù)類型[]數(shù)組名=new數(shù)據(jù)類型[數(shù)組長(zhǎng)度];2024/1/1364C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

例如: int[]intArr=newint[5];上面的語(yǔ)句定義了一個(gè)整型數(shù)組,它包含從intArr[0]到intArr[4]這5個(gè)元素。New運(yùn)算符用于創(chuàng)立數(shù)組,并用默認(rèn)值對(duì)數(shù)據(jù)元素進(jìn)行初始化。在本例中,所有數(shù)組元素的值都被初始化為0。當(dāng)然,用戶也可以為其賦予初始化值,程序代碼如下: int[]intArr=newint[5]{3,6,9,2,10};此時(shí)數(shù)組元素的初始化值就是大括號(hào)中列出的元素值。2024/1/1365C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

定義其他類型的數(shù)組的方法是一樣的,如下面的語(yǔ)句用于定義一個(gè)存儲(chǔ)10個(gè)字符串元素的數(shù)組,并對(duì)其進(jìn)行初始化: string[]strArr=newstring[10];在本例中,strArr數(shù)組中所有數(shù)組元素的初始值都為“〞。2024/1/1366C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

3.靜態(tài)初始化靜態(tài)初始化數(shù)組時(shí),必須與數(shù)組定義結(jié)合在一起,否那么程序就會(huì)報(bào)錯(cuò)。靜態(tài)初始化數(shù)組的格式如下: 數(shù)據(jù)類型[]數(shù)據(jù)名={元素1[,元素2…]};用這種方法對(duì)數(shù)組進(jìn)行初始化時(shí),無(wú)須說(shuō)明數(shù)組元素的個(gè)數(shù),只需按順序列出數(shù)組中的全部元素即可,系統(tǒng)會(huì)自動(dòng)計(jì)算并分配數(shù)組所需的內(nèi)存空間。例如:int[]intArr={3,6,9,2,10};string[]strArr={“English〞,〞Maths〞,〞Computer〞,〞Chinese〞};2024/1/1367C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

4.關(guān)于一維數(shù)據(jù)初始化的幾點(diǎn)說(shuō)明〔1〕動(dòng)態(tài)初始化數(shù)組時(shí),可以把定義與初始化分開(kāi)在不同的語(yǔ)句中者,例如:int[]intArr;//定義數(shù)組intArr=newint[5];//動(dòng)態(tài)初始化,初始化元素的值均為0或者intArr=newint[5]{3,6,9,2,10};此時(shí),在newint[5]{3,6,9,2,10}這條語(yǔ)句中,方括號(hào)中表示數(shù)組元素個(gè)數(shù)的“5〞可以省略,因?yàn)楹竺娲罄ㄌ?hào)中已列出了數(shù)組中的全部元素。2024/1/1368C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

4.關(guān)于一維數(shù)據(jù)初始化的幾點(diǎn)說(shuō)明〔2〕靜態(tài)初始化數(shù)組必須與數(shù)組結(jié)合在一條語(yǔ)句中,否那么程序就會(huì)出錯(cuò)?!?〕在數(shù)組初始化語(yǔ)句中,如果大括號(hào)中已明確列出了數(shù)組中的元素,即確定了元素個(gè)數(shù),那么表示數(shù)組元素個(gè)數(shù)的數(shù)值〔即方括號(hào)中的數(shù)值〕必須是常量,并且該數(shù)值必須與數(shù)組元素個(gè)數(shù)一致。2024/1/1369C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

5.訪問(wèn)一維數(shù)組中的元素在C#中是通過(guò)數(shù)組名和下標(biāo)值來(lái)訪問(wèn)數(shù)組元素的。在訪問(wèn)數(shù)組元素時(shí),其下標(biāo)可以是一個(gè)整型常量或整型表達(dá)式。例如,下面的數(shù)組元素的下標(biāo)都是合法的:

intArr[3],strArr[0],intArr[j],strArr[2*i-1]在實(shí)際的程序設(shè)計(jì)中,也可能導(dǎo)致下標(biāo)值超越正常取值范圍。如果下標(biāo)越界,將會(huì)拋出一個(gè)System.IndexOutOfRangeException的異常。2024/1/1370C#程序設(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)行初始化?!?〕遍歷數(shù)組,將8個(gè)數(shù)中最小的數(shù)找出來(lái),與第1個(gè)位置上的數(shù)對(duì)調(diào)。其方法是:先找出存放最小的數(shù)組元素的下標(biāo),將其存放在變量temp中,然后將QueArray[0]和QueArray[temp]中的數(shù)對(duì)調(diào),使QueArray[0]中存放的是8?jìng)€(gè)數(shù)中最小的數(shù)?!?〕再?gòu)牡冢矀€(gè)數(shù)到第8?jìng)€(gè)數(shù)中找出最小的數(shù),并按步驟〔2〕中的方法,將最小的數(shù)與第2個(gè)位置上的數(shù)對(duì)調(diào),使QueArray[1]中存放的是第2小的數(shù)。〔4〕依次類推,完成整個(gè)排序過(guò)程,并輸出結(jié)果。2024/1/1371C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

程序代碼如下:usingSystem;

namespaceArraySort{classArraySort{staticvoidMain(){inti,j,temp,m;int[]QueArray=newint[]{8,7,6,5,4,3,2,1};for(j=0;j<QueArray.Length;j++){temp=j;2024/1/1372C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

for(i=j+1;i<QueArray.Length;i++)//從j的下一個(gè)元素起開(kāi)始比較{if(QueArray[i]<QueArray[temp])//比較數(shù)組元素temp=i;//使temp為較小的數(shù)的下標(biāo)}if(temp!=j){/*交換QueArray[temp]和QueArray[j]的值,從而可以從所比較的數(shù)組元素中獲得較小的婁賦給QueArray[j]*/m=QueArray[j];QueArray[j]=QueArray[temp];QueArray[temp]=m;}}2024/1/1373C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

Console.WriteLine("輸出排序后的結(jié)果:");for(j=0;j<QueArray.Length;j++)Console.Write("{0}",QueArray[j]);}}}執(zhí)行該程序后,程序輸出結(jié)果如下:123456782024/1/1374C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

注意:〔1〕除了可以顯式地指出數(shù)組長(zhǎng)度之外,更好的做法是使用System.Array類的Length屬性,數(shù)組的Length用于獲取數(shù)組所包含的全部元素的個(gè)數(shù)?!?〕上面所用的排序方法是一種常規(guī)的方法,在C#中,對(duì)數(shù)組進(jìn)行排序還有更高效的方法;可以使用Array類的Sort方法完成這個(gè)功能。Sort方法有多種的重載方法,常用的形式如下: publicstaticvoidSort(Arrayarray);2024/1/1375C#程序設(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;

namespaceSortArray{classSortArray{staticvoidMain(){int[]QueArray=newint[]{8,7,6,5,4,3,2,1};//定義數(shù)組

//輸出原始數(shù)組Console.WriteLine("原始數(shù)組:");for(inti=0;i<QueArray.Length;i++)Console.Write("{0}->",QueArray[i]);Console.WriteLine();//進(jìn)行換行

Array.Sort(QueArray);//對(duì)數(shù)組排序

//輸出排序后的數(shù)組Console.WriteLine("排序以后的數(shù)組:");for(inti=0;i<QueArray.Length;i++)Console.Write("{0}->",QueArray[i]);}}}2024/1/1376C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

for(inti=0;i<QueArray.Length;i++)Console.Write("{0}->",QueArray[i]);Console.WriteLine();//進(jìn)行換行

Array.Sort(QueArray);//對(duì)數(shù)組排序

//輸出排序后的數(shù)組Console.WriteLine("排序以后的數(shù)組:");for(inti=0;i<QueArray.Length;i++)Console.Write("{0}->",QueArray[i]);}}}2024/1/1377C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

6.查找元素在數(shù)組中查找元素,一是從整個(gè)數(shù)組中尋找到與給定值相同的元素來(lái),可以使用Array類的BinarySearch方法完成這個(gè)功能。二是判定數(shù)組中是否含有一個(gè)特定的元素,可以用Contains方法來(lái)實(shí)現(xiàn)?!?〕BinarySearch方法BinarySearch使用二進(jìn)制搜索算法在一維的排序Array中搜索算法,注意必須是已經(jīng)排序的數(shù)組。如果找到給定的值,那么返回其下標(biāo);否那么,返回一個(gè)負(fù)整數(shù)。常用形式如下: publicstaticintBinarySearch(Arrayarray,objectvalue);其中,參數(shù)array為待搜索的數(shù)組,value為待尋找的元素值。2024/1/1378C#程序設(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;

namespaceBinarySearch{classBinarySearch{staticvoidMain(){//定義數(shù)組int[]myArr={8,7,6,5,4,3,2,1};

//對(duì)數(shù)組排序Array.Sort(myArr);

2024/1/1379C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

//搜索inttarget=5;intresult=Array.BinarySearch(myArr,target);//4Console.WriteLine("{0}的下標(biāo)為{1}",target,result);//4Console.ReadLine();}}}2024/1/1380C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

〔2〕Contains方法Contains方法可以確定某個(gè)特定值的否包含在數(shù)組中,返回一個(gè)bool值。Array類的這個(gè)方法實(shí)際上是對(duì)IList接口中方法的實(shí)現(xiàn),常用形式如下:boolIList.Contains(objectvalue);其中,參數(shù)value代表所要驗(yàn)證的元素值。2024/1/1381C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

【例7-4】判定學(xué)生數(shù)組arrSname中是否包含“趙六〞。usingSystem;

namespaceContains{classContains{staticvoidMain(){//定義數(shù)組string[]arrSname={"大寶","張三","李四","趙六","趙二","麻子"};

2024/1/1382C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

//判定是否含有某值stringtarget="趙六";boolresult=

((System.Collections.IList)arrSname).Contains(target);Console.WriteLine("包含{0}?{1}",target,result);//True}}}2024/1/1383C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

7.把數(shù)組作為參數(shù)將數(shù)組作為參數(shù)傳遞可以將初始化的數(shù)組傳遞給方法。例如:int[]myArray=newint[]{1,3,5,7,9};PrintArray(myArray);也可以直接將一個(gè)初始化過(guò)的數(shù)組作為參數(shù)進(jìn)行傳遞。例如下面的代碼等價(jià)于上面數(shù)組傳遞。PrintArray(newint[]{1,3,5,7,9});2024/1/1384C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

【例7-5】演示把一個(gè)初始化后字符串?dāng)?shù)組作為參數(shù)傳遞給PrintArray方法。usingSystem;

namespaceParameter{classParameter{staticvoidPrintArray(string[]strArr){for(inti=0;i<strArr.Length;i++)Console.Write("{0}",strArr[i]);Console.WriteLine();}2024/1/1385C#程序設(shè)計(jì)實(shí)用教程

7.2.3一維數(shù)組

staticvoidMain(){string[]WeekDays=newstring[]{"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};PrintArray(WeekDays);//把數(shù)組作為參數(shù)}}}在上面的例子中,主函數(shù)Main把定義好的數(shù)組WeekDays作為參數(shù)傳遞給方法PrintArray,PrintArray方法把接收到的數(shù)組元素一個(gè)個(gè)地打印出來(lái)。2024/1/1386C#程序設(shè)計(jì)實(shí)用教程二維數(shù)組

在C#中,多維數(shù)組可看作是數(shù)組的數(shù)組,即高維數(shù)組。多維數(shù)組中的每一個(gè)元素本身也是一個(gè)低維數(shù)組,因此多維數(shù)組的定義、初始化和元素訪問(wèn)與一維數(shù)組都非常相似。在多維數(shù)組中,二維數(shù)組是最簡(jiǎn)單也是最常用的數(shù)組,本節(jié)主要介紹二維數(shù)組。2024/1/1387C#程序設(shè)計(jì)實(shí)用教程二維數(shù)組

1.二維數(shù)組的定義二維數(shù)組的一般語(yǔ)法格式如下:

數(shù)據(jù)類型[,]數(shù)組名其中數(shù)據(jù)類型為數(shù)組中元素的類型,可以是前面定義的各種數(shù)據(jù)類型;數(shù)組名可以是C#中合法的標(biāo)識(shí)符;數(shù)組的每一維是用逗號(hào)隔開(kāi)的。例如:char[,]charArr;//定義一個(gè)字符型二維數(shù)組int[,]intArr;//定義一個(gè)整型二維數(shù)組2024/1/1388C#程序設(shè)計(jì)實(shí)用教程二維數(shù)組

定義多維數(shù)組與二維數(shù)組的方法相同,只是要根據(jù)定義數(shù)組的維數(shù)確定方括號(hào)中的逗號(hào)的個(gè)數(shù),一般定義一個(gè)n(n≥2)維數(shù)組,需要的逗號(hào)個(gè)數(shù)是n-1。例如,下面語(yǔ)句定義的是一個(gè)三維數(shù)組: String[,,]stringArr;//定義一個(gè)字符串型三維數(shù)組2024/1/1389C#程序設(shè)計(jì)實(shí)用教程二維數(shù)組

2.二維數(shù)組的初始化二維數(shù)組包括兩種初始化方法,即:動(dòng)態(tài)初始化和靜態(tài)初始化。動(dòng)態(tài)初始化二維數(shù)組的格式如下:

數(shù)組名=new數(shù)據(jù)類型[數(shù)組長(zhǎng)度1,數(shù)組長(zhǎng)度2];其中,數(shù)組長(zhǎng)度1和數(shù)組長(zhǎng)度2可以是整型的常量或變量,它們分別表示數(shù)組第一維和第二維的長(zhǎng)度。2024/1/1390C#程序設(shè)計(jì)實(shí)用教程二維數(shù)組

也可以將二維數(shù)組的定義與動(dòng)態(tài)初始化合并在一條語(yǔ)句中,格式如下: 數(shù)據(jù)類型[,]數(shù)組名=new數(shù)據(jù)類型[數(shù)組長(zhǎng)度1,數(shù)組長(zhǎng)度2];例如: int[,]intArr=newint[3,2];上例中new運(yùn)算符用于創(chuàng)立數(shù)組,并默認(rèn)對(duì)數(shù)組元素進(jìn)行初始化。在上例中,所有數(shù)組元素的值都被初始化為0。2024/1/1391C#程序設(shè)計(jì)實(shí)用教程二維數(shù)組

上面的語(yǔ)句定義一個(gè)二維數(shù)組,其中第1維的長(zhǎng)度為3,第2維的長(zhǎng)度為2。在二維數(shù)組中,第1維常常稱為行,第2維也稱為列。這樣,一個(gè)二維數(shù)組就同一個(gè)二維表格相對(duì)應(yīng)起來(lái)了??梢赃@樣理解二維數(shù)組:如果只給出二維數(shù)組的第1維下標(biāo),以一維數(shù)組來(lái)看二維數(shù)組,那么這樣的數(shù)組中所代表的是另一個(gè)一維數(shù)組。2024/1/1392C#程序設(shè)計(jì)實(shí)用教程二維數(shù)組

在動(dòng)態(tài)初始化二維數(shù)組時(shí),也可以直接為其賦予初始化值,如下所示: int[,]intArr=newint[,]{{1,2},{3,4},{5,6}};它表示的數(shù)組元素的值如表7-2所示。二維數(shù)組也可以進(jìn)行靜態(tài)初始化。例如,下面的語(yǔ)句定義一個(gè)2行3列的double類型二維數(shù)組,并對(duì)其進(jìn)行靜態(tài)初始化。double[,]doubleArr=new{{1.2,2.3,3.4},{4.5,5.6,6.7}};2024/1/1393C#程序設(shè)計(jì)實(shí)用教程二維數(shù)組

二維數(shù)組可以進(jìn)行靜態(tài)初始化。例如,下面的語(yǔ)句定義一個(gè)2行3列的double類型二維數(shù)組,并對(duì)其進(jìn)行靜態(tài)初始化。 double[,]doubleArr=new{{1.2,2.3,3.4},{4.5,5.6,6.7}};靜態(tài)初始化二維數(shù)組時(shí),也必須與數(shù)組定義結(jié)合在一條語(yǔ)句中,否那么程序就會(huì)報(bào)錯(cuò)。而動(dòng)態(tài)初始化數(shù)組時(shí),它們可以分開(kāi)在不同的語(yǔ)句中。2024/1/1394C#程序設(shè)計(jì)實(shí)用教程二維數(shù)組

3.訪問(wèn)二維數(shù)組的元素二維數(shù)組也是通過(guò)數(shù)組名和下標(biāo)值來(lái)訪問(wèn)數(shù)組元素的,二維數(shù)組的下標(biāo)值也是從0開(kāi)始的。與一維數(shù)組不同的是,二維數(shù)組需要兩個(gè)下標(biāo)才能唯一標(biāo)識(shí)一個(gè)數(shù)組元素,其中第1個(gè)下標(biāo)該元素所在的行,第2個(gè)下標(biāo)表示該元素所在的列。如intArr[2,0]代表數(shù)組名為intArr的二維數(shù)組中位于第3行、第1列的元素。根據(jù)二維數(shù)組的特點(diǎn),訪問(wèn)二維數(shù)組中的元素通常需要一個(gè)二重循環(huán)。2024/1/1395C#程序設(shè)計(jì)實(shí)用教程二維數(shù)組

【例7-6】通過(guò)二重循環(huán),將1到16的數(shù)賦給二維數(shù)組,然后顯示數(shù)組的內(nèi)容。程序代碼如下:usingSystem;

namespaceTwoArr{classTwoArr{staticvoidMain(){inti,j;2024/1/1396C#程序設(shè)計(jì)實(shí)用教程二維數(shù)組

int[,]intTwoArray=newint[4,4];for(i=0;i<4;i++){for(j=0;j<4;++j){intTwoArray[i,j]=(i*4)+j+1;Console.Write(intTwoArray[i,j]+"");}Console.WriteLine();}}}}2024/1/1397C#程序設(shè)計(jì)實(shí)用教程二維數(shù)組

該程序執(zhí)行后,輸出結(jié)果如圖7-1所示:2024/1/1398C#程序設(shè)計(jì)實(shí)用教程二維數(shù)組

【例7-7】4個(gè)學(xué)生4門(mén)功課的考試成績(jī)?yōu)槿绫?-3所示:現(xiàn)要求出每位學(xué)生的平均成績(jī)和每門(mén)課程的平均成績(jī)。分析:可以用一個(gè)二維數(shù)組存儲(chǔ)學(xué)生的成績(jī),二維數(shù)組的每一行存儲(chǔ)的是一個(gè)學(xué)生各門(mén)功課的成績(jī),每一列表示的是某一門(mén)功課的各個(gè)學(xué)生考試成績(jī)。將某個(gè)考生各門(mén)功課的成績(jī)相加,然后除以課程門(mén)數(shù),即為該學(xué)生的平均成績(jī)??梢远x一個(gè)一維數(shù)組,用于存儲(chǔ)學(xué)生的總成績(jī),然后輸出學(xué)號(hào)及與其對(duì)應(yīng)的平均成績(jī);同樣可以定義一個(gè)一維數(shù)組,用于存儲(chǔ)每門(mén)課程的平均成績(jī)。2024/1/1399C#程序設(shè)計(jì)實(shí)用教程二維數(shù)組

程序代碼如下:usingSystem;

namespaceStudentScore{classAveScore{staticvoidMain(){constintPupil=4;//學(xué)生人數(shù)constintClass=4;//考試科目數(shù)int[]Ave=newint[4];//定義一個(gè)一維數(shù)組存儲(chǔ)學(xué)生的總成績(jī)int[]ClassAver=newint[4];//定義一個(gè)存儲(chǔ)每門(mén)課程平均成績(jī)的一維數(shù)組intSum=0;

2024/1/13100C#程序設(shè)計(jì)實(shí)用教程二維數(shù)組

//定義二維數(shù)組存儲(chǔ)學(xué)生成績(jī)int[,]Score={{78,90,85,85},{89,85,90,98},{78,90,89,99},{90,97,98,90}};for(inti=0;i<Pupil;i++){for(intj=0;j<Class;j++){Ave[i]+=Score[i,j];//每位學(xué)生成績(jī)總分的統(tǒng)計(jì)ClassAver[j]=ClassAver[j]+Score[i,j];//每門(mén)平均成績(jī)的統(tǒng)計(jì)}}2024/1/13101C#程序設(shè)計(jì)實(shí)用教程二維數(shù)組

for(intk=0;k<Pupil;k++){Console.WriteLine("學(xué)生{0}的平均成績(jī)?yōu)?{1}",k+1,Ave[k]/4.0);}Console.WriteLine();for(intk=0;k<Class;k++){ClassAver[k]/=Pupil;Console.WriteLine("課程{0}的平均成績(jī)?yōu)?{1}",k+1,ClassAver[k]);}}}}2024/1/13

溫馨提示

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

評(píng)論

0/150

提交評(píng)論