如何实现符合要求的ReverseString函数:反转字符串且字母间加下划线(空格除外)
Go语言ReverseString函数问题修复
原代码存在三个核心问题,导致无法通过测试用例:
- 未保留输入中的空格字符,直接跳过空格,使得输出缺失必要的空格分隔
- 所有非空格字符后都强制添加下划线,最终结果会多一个冗余下划线,且未正确处理空格与字母的边界
- 遍历逻辑仅处理非空格字符,没有完整反转整个字符串的字符序列
以下是修正后的代码实现:
package main import "fmt" func ReverseString(str string) string { // 先反转整个字符串的字符序列,用rune处理多字节字符 reversed := make([]rune, 0, len(str)) for _, char := range str { reversed = append([]rune{char}, reversed...) } // 构建结果字符串,按需添加下划线 var result []rune for i, char := range reversed { result = append(result, char) // 仅当当前字符和下一个字符都不是空格时,添加下划线 if i < len(reversed)-1 && char != ' ' && reversed[i+1] != ' ' { result = append(result, '_') } } return string(result) } func main() { fmt.Println(ReverseString("Hello World")) // 输出: d_l_r_o_W o_l_l_e_H fmt.Println(ReverseString("i am a student")) // 输出: t_n_e_d_u_t_s a m_a i }
代码逻辑说明
- 完整反转字符串:使用rune切片处理,兼容中文等多字节字符,将原字符串的每个字符依次插入切片头部,实现全字符反转
- 精准添加下划线:遍历反转后的字符,仅在相邻两个非空格字符之间插入下划线,既满足字母分隔要求,又保留空格的原有位置
- 避免冗余下划线:通过判断下一个字符的存在性和类型,确保不会在字符串末尾生成多余的下划线
测试用例验证:输入"Hello World"时,反转后的字符序列为"dlroW olleH",在相邻非空格字符间插入下划线后,得到"d_l_r_o_W o_l_l_e_H",完全符合测试要求。
内容的提问来源于stack exchange,提问作者zacharyy
相关产品推荐
相关产品推荐

