You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言中如何将切片元素合并为字符串存入map?

问题分析

你的问题出在strings.Fields()的使用上——这个函数会把输入字符串按所有空白字符分割成切片,所以像ADD 1 Harry Potter这样的输入会被拆成["ADD", "1", "Harry", "Potter"],你取info[2]自然只能拿到第一个词。而info[2:]是[]string类型,和你的map[int]string中值的类型不匹配,所以编译报错。

解决方案

要保留带空格的书名,你需要换一种分割方式:只分割前两个空格,把剩下的部分作为完整书名。推荐用strings.SplitN()函数,它可以指定分割的最大次数。

修改后的完整代码

package main

import (
    "bufio"
    "fmt"
    "os"
    "strconv"
    "strings"
)

func main() {
    scanner := bufio.NewScanner(os.Stdin)
    scanner.Scan()
    num, _ := strconv.Atoi(scanner.Text())
    mymap := make(map[int]string)

    for i := 0; i < num; i++ {
        scanner.Scan()
        input := scanner.Text()
        
        // 按空格分割成最多3部分:命令、编号、书名(含空格)
        parts := strings.SplitN(input, " ", 3)
        
        if parts[0] == "ADD" {
            z, _ := strconv.Atoi(parts[1])
            // parts[2]就是完整的带空格的书名
            mymap[z] = parts[2]
        } else if parts[0] == "REMOVE" {
            z, _ := strconv.Atoi(parts[1])
            delete(mymap, z)
        }
    }
    fmt.Println(mymap)
}

为什么这样可行?

strings.SplitN(input, " ", 3)会把输入字符串从左到右分割最多2次(得到3个元素):

  • 第一个元素是命令(ADD/REMOVE)
  • 第二个元素是书籍编号
  • 第三个元素是从第二个空格开始到结尾的所有内容,完美保留书名里的空格

比如输入ADD 2 The Lord of the Rings,parts会是["ADD", "2", "The Lord of the Rings"],直接取parts[2]就能得到完整书名。

内容的提问来源于stack exchange,提问作者Sepehr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 18:12:41