Go語言程式交換字元對
Go 語言中的字串是字元的集合。由於 Go 中的字串是不可變的,因此在生成後無法修改。但是,連線或新增到現有字串可以建立新的字串。作為 Go 中的內建型別,字串型別可以像任何其他資料型別一樣以多種方式使用。讓我們看看如何執行邏輯。在本文中,我們將介紹使用不同示例在字串中交換字元對的方法。
語法
func len(v Type) int
len() 函式用於獲取任何引數的長度。它將要查詢長度的資料型別變數作為引數,並返回一個整數,該整數是變數的長度。
方法 1:透過將字串轉換為位元組切片
在這裡,該方法在將輸入字串轉換為位元組切片後,以 2 為增量遍歷輸入字串。在每次迭代後,它使用多重賦值語句將當前字元與下一個字元交換。之後,將獲得的位元組切片更改回字串並返回。
演算法
步驟 1 - 建立一個 package main 並宣告 fmt(格式化包)包在程式中,其中 main 生成可執行的 Example:s,而 fmt 幫助格式化輸入和輸出。
步驟 2 - 建立一個函式 swap_pairs,並在該函式中從輸入字串建立位元組切片。
步驟 3 - 將變數 i 的值設定為 0,並使用 for 迴圈遍歷位元組,每次增加 i 2。
步驟 4 - 在 for 迴圈內使用多重賦值語句交換當前字元(索引為 i)和下一個字元(索引為 i+1)。
步驟 5 - 在 for 迴圈終止後返回字串到位元組切片的轉換,並使用 fmt.Println() 函式在控制檯上列印輸出,其中 ln 表示換行。
步驟 6 - 它只遍歷字串一次並在位元組切片上“就地”執行交換操作,這種方法可以有效地交換輸入字串中的字元對。
示例
在這個示例中,我們將看到如何透過將字串轉換為位元組來交換字元對。
package main import ( "fmt" ) func swap_pairs(str string) string { b := []byte(str) //convert the string to byte for i := 0; i < len(b)-1; i += 2 { b[i], b[i+1] = b[i+1], b[i] //swap the pair of characters } return string(b) //return the swapped string } func main() { str := "hello" //create a string fmt.Println("The string created here is:", str) fmt.Println("The string with characters swapped is:") fmt.Println(swap_pairs(str)) //print the swapped string on the screen }
輸出
The string created here is: hello The string with characters swapped is: ehllo
方法 2:使用遞迴方法
在這個示例中,我們將看到如何使用遞迴交換字元對。該函式使用遞迴重複交換字串的前兩個字元,然後將剩餘的字元傳遞給後續呼叫。當輸入字串包含少於兩個字元時,遞迴的基本情況,字串將以其原始形式返回。每個遞迴呼叫都會返回字串的第一個字元與第二個字元的連線,以及將傳送到後續遞迴呼叫的字串的其餘部分。讓我們看看示例:和演算法以瞭解其執行情況。
演算法
步驟 1 - 建立一個 package main 並宣告 fmt(格式化包)包在程式中,其中 main 生成可執行的 Example:s,而 fmt 幫助格式化輸入和輸出。
步驟 2 - 建立一個帶有字串引數的函式 swap_pairs_recursive,該引數的字元對需要交換。
步驟 3 - 在函式中,驗證輸入字串是否只有兩個字元或更少。如果是這種情況,則只需返回字串。
步驟 4 - 如果輸入字串的長度大於 2,則返回第二個字元與第一個字元的連線,以及對從輸入字串的第三個字元開始的子字串執行 swap_pairs_recursive 的結果。
步驟 5 - 在輸入字串上呼叫 swap_pairs_recursive 函式。
步驟 6 - 使用 fmt.Println() 函式列印函式呼叫的輸出,其中 ln 表示換行。
步驟 7 - 這種方法使用遞迴將剩餘的字元傳遞給後續遞迴呼叫,同時重複交換輸入字串的前兩個字元。由於需要多次函式呼叫和字串連線,因此它不如先前的方法有效。
示例
在這個示例中,我們將看到如何使用遞迴交換字元對。
package main import ( "fmt" ) func swap_pairs_recursive(str string) string { if len(str) < 2 { return str //return the string if the length is less than 2 } return str[1:2] + str[0:1] + swap_pairs_recursive(str[2:]) //swap the characters recursively } func main() { str := "hello" //create the string fmt.Println("The string created here is:", str) fmt.Println("The string with characters swapped is:") fmt.Println(swap_pairs_recursive(str)) //print the swapped string recursively }
輸出
The string created here is: hello The string with characters swapped is: ehllo
結論
我們使用兩個示例執行了交換字元對的程式。在第一個示例中,我們使用了字串到位元組的轉換,在第二個示例中,我們使用了遞迴來交換字元。