Golang字符串转换技巧与实践

Golang字符串转换技巧与实践 你好

假设这是一个字符串: “123A3212” [var str string = “123A3212”]

但我想对字符串中连续的数字元素进行相加(即 1+2 和 2+3…),忽略字母,并打印每对数字的和。

请帮我解决这个问题

8 回复

感谢,我明白了

更多关于Golang字符串转换技巧与实践的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


由于这听起来确实像是一个作业任务,能否请你先告诉我们到目前为止你尝试了什么,以及现在在哪些方面遇到了困难?

你还没有回答我的问题,请告诉我们你到目前为止尝试了什么。我们不会给你现成的解决方案……

// 代码示例保留区域

在我学习Go语言的过程中,这类问题让我思考如何解决… 😊 以下是我的版本(https://play.golang.org/p/EZB5d2m05W5)

请稍等,我在这里提一个问题

String

你好,

现在没有时间编写代码,但我会尝试类似这样的做法。只需跳过字符串的第一个字符,然后进行计算。这样会得到类似的结果:

“123A3212”
“23A3212”

现在看起来,如果你考虑列和字符的性质(数字或字母),你可以简单地将两个字符串列中的元素逐项相加。
试试看。

在Go语言中,处理字符串中的连续数字相加并忽略字母的需求可以通过遍历字符串并检查字符类型来实现。以下是完整的解决方案和示例代码:

package main

import (
	"fmt"
	"unicode"
)

func main() {
	str := "123A3212"
	
	// 将字符串转换为rune切片以便正确处理Unicode字符
	runes := []rune(str)
	
	// 存储连续数字的和
	var sums []int
	
	// 遍历字符串,检查每对连续的数字
	for i := 0; i < len(runes)-1; i++ {
		// 检查当前字符和下一个字符是否都是数字
		if unicode.IsDigit(runes[i]) && unicode.IsDigit(runes[i+1]) {
			// 将rune转换为实际的整数值
			// '0'的rune值是48,所以减去'0'得到实际数字
			num1 := int(runes[i] - '0')
			num2 := int(runes[i+1] - '0')
			
			// 计算和并添加到结果切片
			sum := num1 + num2
			sums = append(sums, sum)
			
			// 打印当前对的和
			fmt.Printf("数字对 %c 和 %c 的和: %d\n", runes[i], runes[i+1], sum)
		}
	}
	
	// 打印所有和的汇总
	fmt.Printf("\n所有连续数字对的和: %v\n", sums)
}

运行上述代码的输出结果为:

数字对 1 和 2 的和: 3
数字对 2 和 3 的和: 5
数字对 3 和 2 的和: 5
数字对 2 和 1 的和: 3
数字对 1 和 2 的和: 3

所有连续数字对的和: [3 5 5 3 3]

代码说明:

  1. 使用unicode.IsDigit()函数检查字符是否为数字
  2. 将字符串转换为rune切片以正确处理所有Unicode字符
  3. 通过遍历字符串,检查每对连续的字符是否都是数字
  4. 将数字字符转换为实际数值(减去’0’的rune值)
  5. 计算相邻数字对的和并存储结果

对于输入字符串"123A3212",程序会跳过字母’A’,只处理连续的数字对:

  • “12” → 1+2=3
  • “23” → 2+3=5
  • “32” → 3+2=5
  • “21” → 2+1=3
  • “12” → 1+2=3
回到顶部