3 回答

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超4個(gè)贊
沒(méi)有行號(hào),更新后的代碼更容易編譯,但是缺少package和import語(yǔ)句。
查看您的代碼,我注意到了幾件事。這是我的代碼修訂版。
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作為參數(shù)。
您寫(xiě)道:nums := new(vector.IntVector),在哪里type IntVector []int。這會(huì)分配一個(gè)名為的整數(shù)切片引用nums并將其初始化為零,然后該new()函數(shù)會(huì)分配一個(gè)整數(shù)切片參考并將其初始化為零,然后將其分配給nums。我寫(xiě)道:var nums vector.IntVector,它通過(guò)簡(jiǎn)單地分配一個(gè)名為的整數(shù)切片引用nums并將其初始化為零來(lái)避免冗余。
您沒(méi)有檢查的err值strconv.Atoi(),這意味著無(wú)效的輸入已轉(zhuǎn)換為零值。我跳過(guò)它。
要將向量從向量復(fù)制到新切片并返回該切片,您編寫(xiě)了:
r := make([]int, nums.Len())
for i := 0; i < nums.Len(); i++ {
r[i] = nums.At(i)
}
return r
首先,我簡(jiǎn)單地將其替換為等效的IntVector.Data()方法:return nums.Data()。然后,我利用了這一事實(shí),type IntVector []int并通過(guò)將其替換為來(lái)避免分配和復(fù)制return nums。

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊
本示例始終一次讀取一行,然后將整個(gè)行作為字符串返回。如果要從中解析出特定值,則可以。
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貢獻(xiàn)1807條經(jīng)驗(yàn) 獲得超9個(gè)贊
在對(duì)我的回答之一的評(píng)論中,您說(shuō):
根據(jù)語(yǔ)言規(guī)范:“當(dāng)通過(guò)聲明或make()或new()調(diào)用分配內(nèi)存來(lái)存儲(chǔ)值時(shí),沒(méi)有提供任何顯式初始化,則為該內(nèi)存提供默認(rèn)初始化”。那new()有什么意義呢?
如果我們運(yùn)行:
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分配內(nèi)存以存儲(chǔ)整數(shù)值,并將該值初始化為零。該聲明var j *int分配內(nèi)存以存儲(chǔ)指向整數(shù)值的指針,并將該指針初始化為零(nil指針);沒(méi)有分配內(nèi)存來(lái)存儲(chǔ)整數(shù)值。我們看到程序輸出類似于:
i (a value) = 0 ; j (a pointer) = <nil>
內(nèi)置函數(shù)new采用類型T并返回type的值*T。內(nèi)存被初始化為零值。該語(yǔ)句j = new(int)分配內(nèi)存以存儲(chǔ)整數(shù)值,并將該值初始化為零,然后在j中存儲(chǔ)指向該整數(shù)值的指針。我們看到程序輸出類似于:
i (a value) = 0 ; j (a pointer) = 0x7fcf913a90f0 ; *j (a value) = 0
- 3 回答
- 0 關(guān)注
- 234 瀏覽
添加回答
舉報(bào)