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
结论
我们使用两个示例执行了交换字符对的程序。在第一个示例中,我们使用了字符串到字节的转换,在第二个示例中,我们使用了递归来交换字符。