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
相关产品推荐
相关产品推荐

