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

Go语言实现reverseString字符串反转函数结果带多余空格问题求助

问题排查与修复方案

核心问题1:循环逻辑错误

你写的循环存在执行顺序问题,会导致偶数长度的字符串出现重复交换:
原代码使用for range遍历,每次循环先执行交换操作,再判断是否终止。当字符串长度为偶数时,i 超过半值后会先执行一次反向交换,把已经换好的字符又换回原位,导致结果异常。比如长度为4的字符串,i=2时会先交换索引2和1(两个位置已经在i=1时交换过),再触发终止条件,最终结果出错。

核心问题2:输出的“多余空格”是切片打印的默认格式

你看到的[界 世 , o l l e H]里的空格,是Go的fmt包打印切片时默认在元素之间添加的分隔符,不是函数逻辑生成的多余字符。你把返回的[]rune转为string再打印,就不会出现这些空格。


修复后的代码

func reverseString(s string) []rune {
    // 将字符串转为rune切片处理多字节字符
    sir := []rune(s)
    n := len(sir)
    // 直接遍历前半部分即可,不需要中途返回,逻辑更清晰
    for i := 0; i < n/2; i++ {
        sir[i], sir[n-i-1] = sir[n-i-1], sir[i]
    }
    return sir
}

验证方法

用以下代码测试即可看到正确结果:

func main() {
    res := reverseString("Hello, 世界")
    // 转为string打印,无多余空格
    fmt.Println(string(res)) // 输出:界世 ,olleH
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:15:01