3 回答
TA贡献1831条经验 获得超4个赞
没有行号,更新后的代码更容易编译,但是缺少package和import语句。
查看您的代码,我注意到了几件事。这是我的代码修订版。
package main
import (
"bufio"
"fmt"
"io"
"os"
"strconv"
"strings"
"container/vector"
)
func main() {
n := scanf(os.Stdin)
fmt.Println()
fmt.Println(len(n), n)
}
func scanf(in io.Reader) []int {
var nums vector.IntVector
rd := bufio.NewReader(os.Stdin)
str, err := rd.ReadString('\n')
for err != os.EOF {
fields := strings.Fields(str)
for _, f := range fields {
if i, err := strconv.Atoi(f); err == nil {
nums.Push(i)
}
}
str, err = rd.ReadString('\n')
}
return nums
}
我可能要使用任何输入文件scanf(),而不仅仅是Stdin;scanf()以aio.Reader作为参数。
您写道:nums := new(vector.IntVector),在哪里type IntVector []int。这会分配一个名为的整数切片引用nums并将其初始化为零,然后该new()函数会分配一个整数切片参考并将其初始化为零,然后将其分配给nums。我写道:var nums vector.IntVector,它通过简单地分配一个名为的整数切片引用nums并将其初始化为零来避免冗余。
您没有检查的err值strconv.Atoi(),这意味着无效的输入已转换为零值。我跳过它。
要将向量从向量复制到新切片并返回该切片,您编写了:
r := make([]int, nums.Len())
for i := 0; i < nums.Len(); i++ {
r[i] = nums.At(i)
}
return r
首先,我简单地将其替换为等效的IntVector.Data()方法:return nums.Data()。然后,我利用了这一事实,type IntVector []int并通过将其替换为来避免分配和复制return nums。
TA贡献1852条经验 获得超1个赞
本示例始终一次读取一行,然后将整个行作为字符串返回。如果要从中解析出特定值,则可以。
package main
import (
"fmt"
"bufio"
"os"
"strings"
)
func main() {
value := Input("Please enter a value: ")
trimmed := strings.TrimSpace(value)
fmt.Printf("Hello %s!\n", trimmed)
}
func Input(str string) string {
print(str)
reader := bufio.NewReader(os.Stdin)
input, _ := reader.ReadString('\n')
return input
}
TA贡献1807条经验 获得超9个赞
在对我的回答之一的评论中,您说:
根据语言规范:“当通过声明或make()或new()调用分配内存来存储值时,没有提供任何显式初始化,则为该内存提供默认初始化”。那new()有什么意义呢?
如果我们运行:
package main
import ("fmt")
func main() {
var i int
var j *int
fmt.Println("i (a value) = ", i, "; j (a pointer) = ", j)
j = new(int)
fmt.Println("i (a value) = ", i, "; j (a pointer) = ", j, "; *j (a value) = ", *j)
}
该声明var i int分配内存以存储整数值,并将该值初始化为零。该声明var j *int分配内存以存储指向整数值的指针,并将该指针初始化为零(nil指针);没有分配内存来存储整数值。我们看到程序输出类似于:
i (a value) = 0 ; j (a pointer) = <nil>
内置函数new采用类型T并返回type的值*T。内存被初始化为零值。该语句j = new(int)分配内存以存储整数值,并将该值初始化为零,然后在j中存储指向该整数值的指针。我们看到程序输出类似于:
i (a value) = 0 ; j (a pointer) = 0x7fcf913a90f0 ; *j (a value) = 0
- 3 回答
- 0 关注
- 212 浏览
添加回答
举报