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()的內部字串函式。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP