Golang 将一个字符串分成’N’个相等部分
在Go编程语言中,字符串是一种内置的数据类型,用于表示字符序列。它们使用双引号(”)定义,并且可以包含任何有效的Unicode字符。当一个字符串被分成n个相等的部分时,会创建n个相等长度的子字符串。使用编程语言中的字符串分割或字符串切片技术,可以获得这些子字符串。让我们看一些示例以了解逻辑。
方法1:使用for循环和内置的append函数
在这种方法中,定义了一个名为divideString的函数,接受两个输入,一个字符串和一个整数,并输出对应于原始字符串各个部分的字符串切片。为了确定每个部分的大小,该函数将字符串分成整数部分。然后使用for循环遍历字符串并提取部分。使用一个示例字符串和一个整数,main函数执行divideString函数并打印生成的部分。
语法
func append(slice, element_1, element_2…, element_N) []T
append函数用于将值添加到数组切片中,它接受多个参数。第一个参数是要添加值的数组,后面是要添加的值。函数将返回包含所有值的最终数组切片。
步骤
- 步骤1 - 创建一个main包,并在程序中声明fmt(format包)包,其中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 - 此算法通过使用整数除法将字符串分成n个相等的部分,并使用通过计算每个部分的开始和结束索引来提取字符串的部分的for循环。
示例
在以下示例中,我们将使用for循环和内置的append函数来将字符串分割为’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!]
方法2:使用len方法
在这种方法中,我们将学习如何将字符串分成‘N’个等分。此程序使用for循环将字符串划分为n个部分,其中部分大小由math包的ceil函数计算得出。最终的输出结果使用fmt包展示。
语法
math.Ceil()
浮点数可以使用向上取整的方式舍入到最接近的整数。
步骤
- 第1步 −创建一个package main,并在程序中声明fmt(格式化包)以便于main生成可执行文件,fmt用于格式化输入和输出。
-
第2步 −创建一个main函数,在该函数中以字符串和字符串的第n部分作为大小输入。
-
第3步 −通过将输入字符串的长度除以大小,并使用Ceil()方法将其四舍五入到最接近的整数(使用算术运算),确定每个组件的大小。
-
第4步 −从头开始创建一个切片数组,以存储输入字符串的各个组件。
-
第5步 −从索引0开始,使用for循环遍历输入字符串。
-
第6步 −通过将当前循环索引乘以部分大小来计算每次循环的当前部分的起始和结束索引,并且如果结束索引超过输入字符串的长度,则更改结束索引。
-
第7步 −使用起始和结束索引切割输入字符串,然后将结果组件添加到parts数组中。
-
第8步 −使用另一个循环,在第一个循环完成时输出输入字符串的每个组件及其索引。
-
第9步 −综上所述,该程序在Golang中使用了math和fmt包,使用ceil函数确定将字符串分割为n个部分所需的分区数,并使用for循环循环遍历文本。使用fmt包显示最终输出。
示例
在以下示例中,我们将使用len方法将一个字符串分成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方法。
极客笔记