Go語言程式:字典序比較兩個字串


在Go語言中,字典序比較是指以類似字典中單詞按字母順序排列的方式比較字串。這意味著首先比較兩個字串的第一個字元,然後依次比較每個字元。如果發現差異,則比較結束;如果前幾個字元相同,則繼續比較,直到一個字串結束。在字典序中先出現的字串被認為“小於”另一個字串。讓我們透過示例看看如何執行此程式。

方法一:使用使用者自定義函式

在這個例子中,程式中的for迴圈用於重複遍歷兩個字串中的字元,並逐個進行比較。如果發現差異,則迴圈中斷,演算法確定哪個字串的字元更大。如果沒有發現差異,則程式確定哪個字串更短。如果兩個字串長度相同且所有字元都匹配,則程式輸出“兩個字串在字典序上相等”。

演算法

  • 步驟1 − 建立一個名為main的包,並在程式中宣告fmt(格式化包)。main用於生成可執行檔案,fmt用於格式化輸入和輸出。

  • 步驟2 − 建立一個main函式,並在該函式中定義兩個名為hello和alexa的字串變數進行比較。

  • 步驟3 − 找到兩個字串的最小長度。

  • 步驟4 − 使用for迴圈迭代兩個字串的字元,逐個進行比較。

  • 步驟5 − 如果發現不匹配,則中斷迴圈並檢查哪個字串的字元更大。

  • 步驟6 − 如果沒有發現不匹配,則檢查哪個字串更短。

  • 步驟7 − 如果兩個字串長度相同且所有字元都匹配,則列印兩個字串在字典序上相等。

  • 步驟8 − 使用輔助函式min(x,y),該函式返回兩個整數中的較小值。

  • 步驟9 − 此演算法比前一個演算法更高效,因為它只迭代到兩個字串的最小長度,而不是迭代整個字串。這導致執行時間更快。

示例

在這個例子中,我們將使用使用者自定義函式來字典序比較兩個字串。

package main
import "fmt"

func main() {
   mystring1 := "hello"  //create string1
   fmt.Println("The value of string1 is:", mystring1)
   mystring2 := "alexa"  //create string2
   fmt.Println("The value of string2 is:", mystring2)
   minLength := min(len(mystring1), len(mystring2))
   i := 0
   for i < minLength {         //use for loop to compare strings
      if mystring1[i] != mystring2[i] {
         break
      }
      i++
   }
   if i == minLength {
      if len(mystring1) > len(mystring2) {
         fmt.Printf("%s is lexicographically after %s\n", mystring1, mystring2)
      } else if len(mystring1) < len(mystring2) {
         fmt.Printf("%s is lexicographically before %s\n", mystring1, mystring2)
      } else {
         fmt.Printf("%s is lexicographically equal to %s\n", mystring1, mystring2)
      }
   } else {
      if mystring1[i] > mystring2[i] {
         fmt.Printf("%s is lexicographically after %s\n", mystring1, mystring2)
      } else {
         fmt.Printf("%s is lexicographically before %s\n", mystring1, mystring2)
      }
   }
}

func min(x, y int) int {
   if x < y {
      return x
   }
   return y
}

輸出

The value of string1 is: hello
The value of string2 is: alexa
hello is lexicographically after alexa

方法二:使用strings.Compare()函式

在這種方法中,內部函式返回一個整數,表示它們的相對順序:如果第一個字串在字典序上早於第二個字串,則返回負值;如果它們相等,則返回零;如果第一個字串在字典序上晚於第二個字串,則返回正值。讓我們透過示例和演算法來看看它是如何執行的。

語法

strings.Compare()

Compare()函式用於字典序比較兩個字串。它返回一個整數,表示兩個字串之間的關係。值為0表示字串相等,值小於0表示第一個字串在字典序上小於第二個字串,值大於0表示第一個字串在字典序上大於第二個字串。

演算法

  • 步驟1 − 建立一個名為main的包,並在程式中宣告fmt(格式化包)。main用於生成可執行檔案,fmt用於格式化輸入和輸出。

  • 步驟2 − 建立一個main函式,並在該函式中定義兩個名為mystr1和mystr2的字串變數進行比較。

  • 步驟3 − 使用Compare()函式字典序比較兩個字串。如果第一個字串在字典序上早於第二個字串,則此函式返回負值;如果它們相等,則返回零;如果第一個字串在字典序上晚於第二個字串,則返回正值。

  • 步驟4 − 使用if-else語句確定strings.Compare()函式返回的值。

  • 步驟5 − 如果值為負數,則列印第一個字串在字典序上早於第二個字串。

  • 步驟6 − 如果值為零,則列印兩個字串在字典序上相等。

  • 步驟7 − 如果值為正數,則列印第一個字串在字典序上晚於第二個字串。

  • 步驟8 − 使用fmt.Println()函式執行列印語句,其中ln表示換行。

示例

在這個例子中,程式使用strings.Compare()函式字典序比較兩個字串。

package main
import (
   "fmt"
   "strings"
)

func main() {
   mystr1 := "hello" //create string1
   fmt.Println("The value of string1 is:", mystr1)
   mystr2 := "alexa"  //create string2
   fmt.Println("The value of string2 is:", mystr2)

   output := strings.Compare(mystr1, mystr2) //compare strings based on compare function

   if output < 0 {
      fmt.Printf("%s is lexicographically before %s\n", mystr1, mystr2)
   } else if output == 0 {
      fmt.Printf("%s is lexicographically equal to %s\n", mystr1, mystr2)
   } else {
      fmt.Printf("%s is lexicographically after %s\n", mystr1, mystr2)
   }
}

輸出

The value of string1 is: hello
The value of string2 is: alexa
hello is lexicographically after alexa

結論

在本文中,我們使用Go語言執行了兩個程式來字典序比較兩個字串。在第一個例子中,我們使用了包含for迴圈的使用者自定義函式;在第二個例子中,我們使用了名為strings.Compare()的內部字串函式。

更新於:2023年2月20日

2K+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.