Arrays 如何在Go中通过空格将字符串拆分为数组?

Arrays 如何在Go中通过空格将字符串拆分为数组?,arrays,go,Arrays,Go,我想通过空格从这个字符串中获取一个数组,但每次我尝试这样做时,数组所在的整个函数都会被迭代;我得到的不是[“1”、“2”、“+”],而是[“1”][“2”][“+”](对于n个字符,而不仅仅是三个字符) 根据我有限的知识,我相信array:=strings.Fields(string)和array:=strings.Split(string,”)应该可以工作,但两者都有相同的问题,即为每个值创建一个数组。我知道Go阵列的大小是固定的,但我不认为这是问题所在 通过代码及其输出更容易显示这一点: 主

我想通过空格从这个字符串中获取一个数组,但每次我尝试这样做时,数组所在的整个函数都会被迭代;我得到的不是[“1”、“2”、“+”],而是[“1”][“2”][“+”](对于n个字符,而不仅仅是三个字符)

根据我有限的知识,我相信
array:=strings.Fields(string)
array:=strings.Split(string,”)
应该可以工作,但两者都有相同的问题,即为每个值创建一个数组。我知道Go阵列的大小是固定的,但我不认为这是问题所在

通过代码及其输出更容易显示这一点:

主程序包
进口(
“fmt”
“字符串”
“strconv”
“错误”
)
func main(){
fmt.Println(“RPN计算器版本0.1:”)
为了{
fmt.Println(“输入RPN公式:”)
变量表示字符串
格式扫描(&符号)
fmt.Println()
RPN计算器(符号)
}
}
func RpnSyntaxChecker(符号[]字符串)(布尔,错误){
fmt.Println(符号)
if(len(表示法)<3){
返回false,errors.New(fmt.Sprintf(“表示法需要至少两个数字和一个运算符,仅提供%v”,len(表示法)))
}否则{
_,err1:=strconv.ParseFloat(表示法[0],64)
_,err2:=strconv.ParseFloat(表示法[1],64)
如果(err1!=nil | | err2!=nil){
返回false,errors.New(fmt.Sprintf(“值%v%v%v处的数字不正确”,表示法[0],表示法[1],表示法[2]))
}否则{
返回真,无
}
}
}
函数RpnCalculator(表示字符串)(浮点64){
notationslice:=字符串.字段(表示法)
fmt.Println(RpnSyntaxChecker(notationslice))
返回0.1
}

fmt.Scan
分别扫描带空格的文本。因此,您可以使用
bufio扫描仪
进行如下操作

func main() {
    fmt.Println(" ~~ RPN calculator ~~ ")
    scanner := bufio.NewScanner(os.Stdin)
    scanning := true
    for scanning {
        fmt.Println("Enter RPN notation:")
        var notation string
        scanning = scanner.Scan()
        notation = scanner.Text()
        fmt.Println()
        result, calcerr := RPNcalculator(notation)
        if calcerr != nil {
            fmt.Println(calcerr)
        } else {
            fmt.Println(result)
        }
    }
    if err := scanner.Err(); err != nil {
        fmt.Println("reading standard input:", err)
    }
}

您发布的代码不是一个注释,
strings.Split
返回一个切片,而不是一个数组。数组在Go中不常用。
RPNsyntaxCheck
在做什么?@nipuna实际上只是检查数组的长度是否为3moment@ArkadiuszDrabczyk不幸的是,我希望输入是任意长度的,所以我不能只给这三个变量分配一个变量,你能解释一下在
scanning=scanner.Scan()之后发生了什么吗?文本做什么?“Text将调用Scan生成的最新标记返回为新分配的包含字节的字符串。”对我来说,听起来不像数组…
scanning=scanner.Scan()
here Scan()返回bool,当扫描成功时为true,如果是输入字符串的EOF或发生任何其他错误,则为false。请了解更多。这与我的问题无关?您可以读取带空格的整个字符串,并使用您在问题中提到的两个函数将其拆分。然后它返回一个字符串数组,其中包含与空格分隔的输入。如果你能理解这一点,你就能解决你的问题。