1 / 35

第 8 章 字串與陣列

第 8 章 字串與陣列. 8-1 一維陣列的處理 8-2 字串處理 8-3 多維陣列的處理 8-4 動態陣列與參數傳遞 8-5 陣列排序與搜尋. 8-1 一維陣列的處理. 8-1-1 陣列的基礎 8-1-2 宣告一維陣列 8-1-3 For Each 迴圈走訪陣列元素與邊界函數. 8-1-1 陣列的基礎 - 說明. 「陣列」( Arrays )是一種程式語言的基本資料結構,屬於一種循序性的資料結構。日常生活最常見的範例是一排信箱,如下圖所示:. 8-1-1 陣列的基礎 -VB 陣列.

didina
Download Presentation

第 8 章 字串與陣列

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第8章 字串與陣列 • 8-1一維陣列的處理 • 8-2 字串處理 • 8-3 多維陣列的處理 • 8-4 動態陣列與參數傳遞 • 8-5 陣列排序與搜尋

  2. 8-1 一維陣列的處理 • 8-1-1 陣列的基礎 • 8-1-2 宣告一維陣列 • 8-1-3 For Each迴圈走訪陣列元素與邊界函數

  3. 8-1-1 陣列的基礎-說明 • 「陣列」(Arrays)是一種程式語言的基本資料結構,屬於一種循序性的資料結構。日常生活最常見的範例是一排信箱,如下圖所示:

  4. 8-1-1 陣列的基礎-VB陣列 • Visual Basic語言的陣列屬於參考資料型態,它可以將相同資料型態的變數集合起來,使用一個名稱代表,以索引值存取元素,每一個元素相當於是一個變數,如下圖所示:

  5. 8-1-2 宣告一維陣列-語法 • Visual Basic陣列同樣使用【Dim】關鍵字來宣告,我們可以在宣告同時指定陣列尺寸。一維陣列的宣告語法,如下所示: Dim 陣列名稱(最大索引) As 資料型態 或 Dim 陣列名稱(0 To 最大索引) As 資料型態 • 陣列元素個數為括號的最大索引數加一,也可以使用To關鍵字指出範圍。

  6. 8-1-2 宣告一維陣列-範例 • 例如:宣告一維陣列來儲存學生姓名和成績,如下所示: Dim arrScore(4) As Integer Dim arrName(4) As String • 上述程式碼宣告2個一維陣列,一為整數陣列;一是字串陣列,括號值是陣列最大的索引值。索引值是從0開始,以整數陣列來說是0~4共有5個元素。

  7. 8-1-2 宣告一維陣列-陣列值 • 我們也可以在宣告陣列時,不指定陣列最大索引值,而直接指定陣列元素的初值,如下所示: Dim arrScore() As Integer = {60, 89, 75, 68, 90} • 另一種方法是使用指定敘述來指定陣列值,如下所示: arrScore(0) = 60 arrScore(1) = 89 arrScore(2) = 75 arrScore(3) = 68 arrScore(4) = 90

  8. 8-1-2 宣告一維陣列-取出陣列值 • 同樣方式,我們可以使用索引值來取出陣列元素值,如下所示: Dim score As Integer score = arrScore(3) • 上述程式碼取得陣列索引3的值,因為索引值從0開始,也就是陣列的第4個元素值68。

  9. 8-1-3 For Each迴圈走訪陣列元素與邊界函數-走訪陣列(語法) • For Each迴圈可以輕鬆走訪整個一維陣列,其語法如下所示: For Each 變數 In 陣列 程式區塊 Next • 上述「變數」可以取得陣列的一個元素,變數需要和陣列屬於相同資料型態,迴圈自動從索引0開始,每執行一次迴圈取得一個元素值並且自動移至下一個元素,直到沒有元素為止。

  10. 8-1-3 For Each迴圈走訪陣列元素與邊界函數-走訪陣列(範例) • 例如:計算上一節arrScore陣列元素的總和,如下所示: For Each element In arrScore total += element Next • 上述程式碼的變數element是陣列元素,每執行一次,就將陣列元素值加到total,最後變數total是陣列元素的總和。

  11. 8-1-3 For Each迴圈走訪陣列元素與邊界函數-陣列邊界函數 • 如果使用For/Next迴圈(Do/Loop迴圈也可以)來存取陣列元素,我們可以搭配Visual Basic函數來取得陣列邊界,傳入參數是陣列變數,如下表所示:

  12. 8-2 字串處理 • 8-2-1 字串的基礎 • 8-2-2 字串長度與大小寫轉換 • 8-2-3 取出子字串與字串反轉 • 8-2-4 子字串的搜尋與取代

  13. 8-2-1 字串的基礎-說明 • Visual Basic字串是String資料型態的變數或字串值,字串是0或多個依序的Char資料型態的字元,以雙引號括起的文字內容,如下所示: Dim str As String = _ "Visual Basic 2005程式設計範例教本" Dim str1 As String str1 = "ASP.NET 2.0網頁製作徹底研究"

  14. 8-2-1 字串的基礎-新字串值 • 不過Visual Basic字串內容並不能更改,也就是說,一旦建立字串後,就無法改變其值,只能重新指定成新的字串值或另一個字串變數,如下圖所示:

  15. 8-2-2 字串長度與大小寫轉換 • Visual Basic函數可以取得字串長度、進行英文字母大小寫轉換和刪除頭尾的空白字元,如下表所示:

  16. 8-2-3 取出子字串與字串反轉 • Visual Basic提供Mid()、Left()和Right()等函數,可以從字串中取出所需的子字串,或是反轉字串,如下所示:

  17. 8-2-4 子字串的搜尋與取代-搜尋 • 在多行文字方塊如果輸入一整篇文章,我們可以使用Visual Basic函數來搜尋字串,和自行建立函數來取代子字串。Visual Basic字串搜尋函數,如下表所示:

  18. 8-2-4 子字串的搜尋與取代-取代 • Visual Basic並沒有字串取代函數,我們可以自行使用Mid()、Left()和Right()函數來建立字串取代功能,如下所示: out = txtInput.Text strLeft = Mid(out, 1, pos) strRight = Mid(out, pos + length + 1) txtInput.Text = strLeft & txtReplace.Text & strRight • 上述程式碼從字串out使用Mid()函數取出位在子字串左邊的strLeft字串和右邊的strRight字串,然後在中間加上取代字串,就完成字串取代功能。

  19. 8-3 多維陣列的處理-說明 • 「二維陣列」(Two-dimensional Array)或多維陣列都是一維陣列的擴充。如果將一維陣列想像成一度空間的線,二維陣列就是二度空間的平面,三維陣列即空間。 • 在日常生活中的二維陣列應用非常廣泛,只要是平面的表格,都可以轉換成二維陣列來表示。例如:月曆、功課表和成績單等。例如:在Visual Basic宣告學生成績的二維陣列,如下所示: Dim Scores(,) As Integer = _ { { 54, 68, 93 }, { 67, 78 , 89} }

  20. 8-3 多維陣列的處理-圖例 • 二維陣列擁有2個索引,左索引(Left Index)指出元素位在哪一列,右索引(Right Index)指出位在哪一欄,使用2個索引值就可以存取指定的二維陣列元素。

  21. 8-3 多維陣列的處理-指定元素值 • 二維陣列如果沒有指定陣列初值,我們需要在宣告時指定陣列尺寸,如下所示: Dim Scores(1, 2) As Integer Scores(0,0)=54 Scores(0,1)=68 Scores(0,2)=93 Scores(1,0)=67 Scores(1,1)=78 Scores(1,2)=89 • 上述程式碼設定二維陣列的元素值。

  22. 8-3 多維陣列的處理-走訪元素 • 在設定陣列值後,存取二維陣列需要使用二層巢狀迴圈,如下所示: For i = 0 To 1 For j = 0 To 2 Sums(i) += Scores(i, j) Next j Next i

  23. 8-4 動態陣列與參數傳遞 • 8-4-1 動態陣列 • 8-4-2 傳遞字串與陣列參數

  24. 8-4-1 動態陣列-宣告 • Visual Basic陣列可以使用【ReDim】關鍵字在程式執行時,重新調整其尺寸。不過ReDim不能宣告陣列,只能更改已經宣告的陣列尺寸,如下所示: Dim arrScore(4) As Integer ……… ReDim arrScore(6) • 上述程式碼將原來arrScore陣列大小從5改為7個元素。因為Visual Basic陣列在變更陣列尺寸後可能遺失陣列資料。

  25. 8-4-1 動態陣列-保留陣列內容 • 如果陣列已經擁有內容,請使用Preserve關鍵字來保留原陣列的內容,如下所示: ReDim Preserve arrScore(6) • 上述程式碼可以放大陣列尺寸,當然放大陣列尺寸並不會有問題,如果縮小陣列的話,陣列裁剪部分的資料還是會遺失。

  26. 8-4-1 動態陣列-二維動態陣列 • 對於是二維以上的多維陣列,我們可以變更指定維度的尺寸,如果使用Preserve關鍵字,就只能變更最後1個維度的尺寸,如下所示: Dim arrTable(10, 20) ………. ReDim Preserve arrTable(10, 30)

  27. 8-4-2 傳遞字串與陣列參數-說明 • 程序與函數的參數如果是字串或陣列,因為字串與陣列都是參考資料型態,此時ByVal和ByRef參數傳遞的差異,如下表所示:

  28. 8-4-2 傳遞字串與陣列參數-範例 • 例如:在程序與函數中,使用指定敘述將參數指定成其他陣列,如下所示: Sub Replace(ByVal A() As Integer) Dim B() As Integer = {10, 20, 30} A = B …………. End Sub • 上述程序將參數的陣列A指定成新陣列B,事實上,並不會影響原參數陣列A,因為傳值方式不能指定成新陣列。

  29. 8-5 陣列排序與搜尋 • 8-5-1 陣列的排序 • 8-5-2 陣列的搜尋

  30. 8-5-1 陣列的排序-基礎 • 排序工作是將一些資料依照特定原則排列成遞增或遞減的順序。例如:整數陣列Data的內容,如下所示: Data(0)=89 Date(1)=34 Date(2)=78 Date(3)=45 • 上述陣列以整數值的大小,將陣列內容依遞增的順序來排序。其排序結果如下所示: Data(0)=34 Date(1)=45 Date(2)=78 Date(3)=89 • 上述陣列Data已經完成排序,其大小順序如下所示: Data(0) < Data(1) < Data(2) < Data(3)

  31. 8-5-1 陣列的排序-泡沫排序法(說明) • 泡沫排序法(Bubble Sort)是使用交換方式來進行排序,可以將較小元素逐漸移動至陣列開始,較大元素慢慢浮向陣列的最後,如同水缸中的泡沫,慢慢往上浮,故稱為泡沫排序法。

  32. 8-5-1 陣列的排序-泡沫排序法(過程) • 泡沫排序法的過程是使用交換方法,在陣列中找尋最大值,例如:原始陣列內容,如下所示: Data(0)=89 Date(1)=34 Date(2)=78 Date(3)=45 • 陣列依序比較陣列元素0和1,元素1和2,元素2和3來交換陣列元素,如下所示: Data(0)=89 > Date(1)=34 => Data(0)=34 Date(1)=89 交換 Data(1)=89 > Date(2)=78 => Data(1)=78 Date(2)=89 交換 Data(2)=89 > Date(3)=45 => Data(2)=45 Date(3)=89 交換 • 陣列最大值89一步步往陣列尾端移動。接著重複上述步驟,每次縮小1個元素後,再重新比較陣列元素,就可以完成陣列元素的排序。

  33. 8-5-2 陣列的搜尋-基礎 • 搜尋是在資料中找出是否存在與鍵值相同的資料,如果資料存在,就進行後續的資料處理。例如:查尋電話簿是為了找朋友的電話號碼,然後與他連絡。在書局找書也是為了找到後買回家閱讀。 • 搜尋方法依照搜尋的資料分為兩種,如下所示: • 沒有排序的資料:針對沒有排序的資料執行搜尋,我們需要從資料的第1個元素開始比較,從頭到尾以確認資料是否存在。 • 已經排序的資料:因為資料已經排序,所以搜尋就不需從頭開始一一比較。例如:在電話簿找電話,相信沒有人是從電話簿的第1頁開始找,而是直接從姓名出現的頁數開始找,因為電話簿已經依照姓名進行排序。

  34. 8-5-2 陣列的搜尋-線性搜尋法 • 線性搜尋法(Sequential Search)是從陣列的第1個元素開始走訪整個陣列,然後一個一個比較是否擁有搜尋的鍵值,因為需要走訪整個陣列,所以陣列資料是否排序都無所謂。 • 換句話說,在Visual Basic程式可以使用迴圈來走訪陣列,以便比較陣列是否有指定的鍵值。

  35. 8-5-2 陣列的搜尋-二元搜尋法 • 二元搜尋法(Binary Search)是一種分割資料的搜尋方法,搜尋資料是已經排序的資料。二元搜尋法先檢查排序資料的中間元素,如果等於鍵值就是找到;如果小於鍵值,表示資料在前半段;否則在後半段。然後繼續分割半段資料來重覆上述操作,直到找到或已經沒有資料可以分割為止。 • 例如:Data陣列索引的上下範圍分別是low和high,中間元素mid是(low + high)\2。在執行二元搜尋時分成三種情況,如下所示: • 搜尋鍵值小於陣列的中間元素:鍵值在資料陣列的前半部。 • 搜尋鍵值大於陣列的中間元素:鍵值在資料陣列的後半部。 • 搜尋鍵值等於陣列的中間元素:找到搜尋的鍵值。

More Related