Go语言程序:将字符串分割成 N 等份
在 Go 编程语言中,字符串是内置的数据类型,表示字符序列。它们用双引号 (") 定义,可以包含任何有效的 Unicode 字符。当一个字符串被分成 n 等份时,会创建 n 个长度相等的子字符串。可以使用编程语言中的字符串分割或字符串切片技术来获取子字符串。让我们来看一些例子来理解这个逻辑。
方法一:使用 for 循环和内置 append 函数
在这个方法中,定义了一个名为 divideString 的函数,它接受两个输入,一个字符串和一个整数,并输出一个字符串切片,该切片对应于原始字符串的各个部分。为了确定每个部分的大小,该函数将字符串长度除以整数。然后使用 for 循环遍历字符串并提取各个部分。主函数使用示例字符串和整数执行 divideString 函数,并打印生成的各个部分。
语法
func append(slice, element_1, element_2…, element_N) []T
append 函数用于向数组切片添加值。它接受多个参数。第一个参数是要向其添加值的数组,后跟要添加的值。然后,该函数返回包含所有值的最终数组切片。
算法
步骤 1 − 创建一个 main 包,并在程序中声明 fmt(格式化包),其中 main 生成可执行示例,fmt 帮助格式化输入和输出。
步骤 2 − 定义一个名为 divideString 的函数,它接受两个参数:一个字符串 mystr 和一个整数 size。
步骤 3 − 创建一个类型为 []string 的变量 parts 来存储字符串的分割部分。
步骤 4 − 使用整数除法 len(str) / size 计算每个部分的大小。
步骤 5 − 使用 for 循环迭代字符串并提取各个部分。
步骤 6 − 在每次迭代中,计算当前部分的起始和结束索引。起始索引是 i * partSize,其中 i 是当前迭代次数。
步骤 7 − 结束索引是 start + partSize,但最后一轮迭代中设置为 len(str)。
步骤 8 − 将当前部分 (str[start:end]) 附加到 parts 变量。for 循环结束后,返回 parts 变量。
步骤 9 − 在 main 函数中,调用 divideString 函数,传入示例字符串和整数。
步骤 10 − 使用 fmt.Println(parts) 打印结果部分,其中 ln 表示换行。
步骤 11 − 此算法通过使用整数除法并将 for 循环用于提取字符串部分(使用计算出的每个部分的起始和结束索引)来将字符串分成 n 等份。
示例
在下面的示例中,我们将使用 for 循环和内置 append 函数在 golang 中将字符串分成 N 等份。
package main import ( "fmt" ) func divideString(mystr string, size int) []string { var parts []string partSize := len(mystr) / size for i := 0; i < size; i++ { start := i * partSize end := start + partSize if i == size-1 { end = len(mystr) } parts = append(parts, mystr[start:end]) } return parts } func main() { mystr := "Hello,alexa!" //create a string fmt.Println("The string given here is:") n_parts := divideString(mystr, 3) fmt.Println("The string after is converted to n equal parts:") fmt.Println(n_parts) //print the string divided into n equal parts }
输出
The string given here is: The string after is converted to n equal parts: [Hell o,al exa!]
方法二:使用 len 方法
在这个方法中,我们将学习如何将字符串分成 N 等份。此程序使用 for 循环在计算每个部分的大小(使用 math 包的 ceil 函数)后将字符串分成 n 部分。最终输出使用 fmt 包显示。
语法
math.Ceil()
可以使用向上取整方法将浮点数四舍五入到最接近的整数。
算法
步骤 1 − 创建一个 main 包,并在程序中声明 fmt(格式化包),其中 main 生成可执行示例,fmt 帮助格式化输入和输出。
步骤 2 − 创建一个 main 函数,并在该函数中将字符串和字符串的第 n 部分作为 size 输入。
步骤 3 − 通过将输入字符串的长度除以 size 并四舍五入到最接近的整数(使用算术),使用 Ceil() 方法确定每个部分的大小。
步骤 4 − 从头创建一个切片数组来存储输入字符串的部分。
步骤 5 − 从索引 0 开始,使用 for 循环迭代输入字符串。
步骤 6 − 通过将当前循环索引乘以部分大小来计算每个循环迭代的当前部分的起始和结束索引,如果超出输入字符串长度则更改结束索引。
步骤 7 − 使用起始和结束索引切片输入字符串,然后将生成的子字符串添加到 parts 数组中。
步骤 8 − 使用另一个循环在第一个循环完成后输出输入字符串的每个部分及其索引。
步骤 9 − 总体而言,该程序使用了 Golang 中的 math 和 fmt 包,使用 ceil 函数确定将字符串分成 n 部分所需的分割数,并使用 for 循环重复遍历文本。最终输出使用 fmt 包显示。
示例
在下面的示例中,我们将使用 len 方法在 golang 中将字符串分成 N 等份。
package main import ( "fmt" "math" ) func main() { input_string := "Hello, alexa!" //create a string fmt.Println("The input string given here is:", input_string) size := 3 fmt.Println("The string after getting divided into n equal parts is:") partSize := int(math.Ceil(float64(len(input_string)) / float64(size))) parts := make([][]rune, size) for i := 0; i < size; i++ { //run a loop get the string in n equal parts start := i * partSize end := start + partSize if end > len(input_string) { end = len(input_string) } parts[i] = []rune(input_string)[start:end] } for i, part := range parts { fmt.Printf("Part %d: %s\n", i+1, string(part)) } }
输出
The input string given here is: Hello, alexa! The string after getting divided into n equal parts is: Part 1: Hello Part 2: , ale Part 3: xa!
结论
我们使用两个例子执行了将字符串分成 n 等份的程序。在第一个示例中,我们使用了循环和内置 append 函数,在第二个示例中,我们使用了 len 方法。