反转字符串单词时触发ArgumentOutOfRangeException,禁用Split等内置方法求解决
字符串单词反转问题修复及代码优化
问题分析
- 原代码抛出
ArgumentOutOfRangeException的核心原因是Substring参数使用错误:Substring(startIndex, length)的第二个参数是截取长度,而非结束索引。原代码传入j+1会导致截取长度超出字符串有效范围,触发异常。 - 代码违反了禁用
Concat的要求,且依赖Substring也不符合“不使用任何内置方法”的限制。
修复后的代码
string s = Console.ReadLine(); int i = s.Length - 1; string ans = ""; while (i >= 0) { // 跳过末尾空格 while (i >= 0 && s[i] == ' ') i--; if (i < 0) break; // 标记单词末尾索引 int j = i; // 定位单词起始位置的前一个索引 while (i >= 0 && s[i] != ' ') i--; // 手动遍历构建单词(替代Substring) string word = ""; for (int k = i + 1; k <= j; k++) { word += s[k]; } // 拼接结果(替代Concat) if (ans == string.Empty) { ans = word; } else { ans += " " + word; } } Console.WriteLine(ans); Console.ReadLine();
关键优化点
- 替换内置方法:用for循环手动遍历字符构建单词,完全替代
Substring;用+=直接拼接字符串,替代Concat,满足题目禁用要求。 - 修正参数错误:彻底避免
Substring参数误用导致的越界异常。 - 提前边界判断:跳过空格后立即检查索引是否合法,避免后续无效逻辑执行。
内容的提问来源于stack exchange,提问作者RPA HEM
相关产品推荐
相关产品推荐

