Golang程序 交换一对字符
Golang中的字符串是一个字符的集合。由于Go中的字符串是不可改变的,所以在产生后不能被修改。然而,串联或添加到一个现有的字符串,可以创建新的字符串。作为Go中的一个内置类型,字符串类型可以以各种方式使用,就像其他数据类型一样。让我们来看看这个逻辑是如何执行的。在这篇文章中,我们将通过不同的例子来灌输交换字符串中的一对字符的方法。
语法
func len(v Type) int
len() 函数是用来获取任何参数的长度的。它需要一个参数作为数据类型的变量,我们希望找到其长度,并返回整数值,即该变量的长度。
方法1:通过将字符串转换为字节片。
在这里,以2为增量,该方法在将输入的字符串转换为字节片后对其进行迭代。使用多重赋值语句,它在每次迭代后将当前字符与下一个字符进行切换。之后,获得的字节片被改回字符串,并被送回。
算法
- 第1步 – 在程序中创建一个包main并声明fmt(format package)包,其中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步 – 创建一个包main,并在程序中声明fmt(format package)包,其中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
结论
我们用两个例子执行了对换字符的程序。在第一个例子中,我们使用了字符串到字节的转换,在第二个例子中我们使用递归来交换字符。