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

C#自定义单词反转函数报索引越界异常排查与无内置方法实现

原代码报错原因分析

原代码抛出IndexOutOfRangeException异常且无法实现单词反转的核心问题如下:

  • 循环判断条件逻辑错误:拆分单词时使用的while(start <= str[i - 1])完全不符合预期,str[i-1]是char类型,运行时会隐式转换为对应的ASCII数值(普通英文字母的ASCII值在97~122区间),循环会让start变量持续递增到远超字符串实际长度的数值,直接触发索引越界
  • 单词存储逻辑错误:原逻辑逐字符往ArrayList添加单个字符,没有将连续非空格字符作为完整单词存储,即使不触发越界也无法拼接出正确的单词
  • 末尾单词丢失:遍历逻辑仅在遇到空格时才截取前面的内容,字符串末尾的最后一个单词后没有空格,永远不会被存入集合
  • 结果拼接有冗余:反向拼接时每个元素后都追加空格,最终返回的字符串末尾会多出一个无效的尾空格
纯手动实现的ReverseWords方案

以下实现全程不调用String.Split()、Array.Reverse()、String.Substring()、String.Join()等内置字符串/数组处理函数,从遍历到拼接全部手动实现:

using System;

public class HelloWorld
{
    public static string ReverseWords(string str)
    {
        // 空值边界处理
        if (str == null || str.Length == 0)
        {
            return "";
        }
        
        char[] resultBuffer = new char[str.Length];
        int writePos = 0; // 结果缓冲区的当前写入位置
        int scanPos = str.Length - 1; // 从字符串末尾开始向前扫描

        while (scanPos >= 0)
        {
            // 跳过连续空格
            while (scanPos >= 0 && str[scanPos] == ' ')
            {
                scanPos--;
            }
            if (scanPos < 0)
            {
                break;
            }
            
            // 定位当前单词的起止下标
            int wordEnd = scanPos;
            while (scanPos >= 0 && str[scanPos] != ' ')
            {
                scanPos--;
            }
            int wordStart = scanPos + 1;
            
            // 非首个单词前补空格
            if (writePos > 0)
            {
                resultBuffer[writePos] = ' ';
                writePos++;
            }
            
            // 将当前单词正序写入结果缓冲区
            for (int j = wordStart; j <= wordEnd; j++)
            {
                resultBuffer[writePos] = str[j];
                writePos++;
            }
        }

        // 仅将有效长度的字符转为字符串返回
        return new string(resultBuffer, 0, writePos);
    }
    
    public static void Main(string[] args)
    {
       Console.WriteLine(ReverseWords("Our favorite color is Pink"));
       // 输出结果:Pink is color favorite Our
    }
}
方案特性说明
  • 时间复杂度为O(n),全程仅做线性扫描,无多余遍历和反转开销
  • 空间复杂度为O(n),仅使用与原字符串等长的字符数组作为缓冲区,没有使用ArrayList等冗余集合结构,内存效率更高
  • 自动兼容字符串首尾空格、单词间多空格的场景,返回结果不会出现多余的尾空格
  • 所有拆分、反转逻辑全部手动实现,没有依赖题目要求规避的内置字符串/数组处理函数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 18:51:48