概念
- golang中的input
可以使用fmt.Scan 或者 fmt.scanf,fmt.scanln 来获取用户的输入
var input string
_, err := fmt.Scan(&input)
if err != nil {
fmt.Println("输入错误:", err)
return
}
fmt.Println(“你输入的是:”, input)
在这个例子中,fmt.Scan 函数用于从标准输入中读取值,并将这些值赋给后续的参数。这里的 &input 是 input 变量的指针,使得 fmt.Scan 可以修改这个变量的值。如果输入成功,程序会输出用户输入的内容。如果发生错误,会输出错误信息。
当需要输入多个数据时,可以使用fmt.Scan()函数的多个参数来实现。例如,如果需要输入两个整数,则可以使用如下语法:
var a, b string
fmt.Scan(&a, &b)
刷题
344 反转字符串
尽量不去依赖库函数去解决,golang也没有reserve函数去直接实现
541 反转字符串II
优化:
在一次提交中,我使用了count来计算字符串长度整除2*k的大小,这是没有必要的
其实在遍历字符串的过程中,只要让 i += (2 * k),i 每次移动 2 * k 就可以了,然后判断是否需要有反转的区间。
因为要找的也就是每2 * k 区间的起点,这样写,程序会高效很多。
所以当需要固定规律一段一段去处理字符串的时候,要想想在for循环的表达式上做做文章。
卡码网: 替换数字
脱离leecode有一些不适应,输入从函数变量变成了input变量,需要完整的写出package,main,遇到了一些问题
package main
import "fmt"
func main() {
var input string
fmt.Scan(&input)
bstr := []byte(input)
for i:=len(bstr)-1; i>=0 ; i-- {
if bstr[i] >= '0' && bstr[i] <= '9' {
// 切片的切割数字超过切片长度也不会溢出
//fmt.Println(bstr[i+1:])
bstr = append(bstr[:i], append([]byte("number"), bstr[i+1:]...)...)
}
}
fmt.Println(string(bstr))
}
总结
Golang 报错cannot assign to s[left] (neither addressable nor a map index expression)
这个错误表明你正在尝试修改一个不可addressable的变量。在Golang中,只有某些类型的变量是addressable的,比如指针或者数组的元素。
错误的代码可能看起来像这样:
s := "hello"
s[0] = 'H'
这里的s[0]不是一个可addressable的变量,因为字符串(string 类型)是不可变的。
解决方法:
如果你需要修改字符串,你可以使用字节切片([]byte)或者字符串构建器(strings.Builder)。