C#中用for循环实现整句单词反转的技术问询(禁用Split/Reverse)
仅用for循环实现C#句子单词反转(禁用Split和Reverse函数)
嘿,我来帮你搞定这个问题!你需要纯靠for循环反转句子里的单词顺序,还不能用Split和Reverse这类现成函数对吧?先给你一个可直接运行的完整实现,再一步步拆解逻辑。
完整可运行代码
using System; class Program { static void Main() { string input = "I'm Learning c#"; char[] inputChars = input.ToCharArray(); int wordEndIndex = inputChars.Length - 1; // 从字符串末尾开始向前遍历 for (int i = inputChars.Length - 1; i >= 0; i--) { // 碰到空格,说明找到了一个单词的左边界 if (inputChars[i] == ' ') { // 输出当前单词(从空格后一位到wordEndIndex) for (int j = i + 1; j <= wordEndIndex; j++) { Console.Write(inputChars[j]); } Console.Write(" "); // 更新单词末尾索引到空格前一位 wordEndIndex = i - 1; } // 遍历到字符串开头,处理最后一个(原句第一个)单词 else if (i == 0) { for (int j = i; j <= wordEndIndex; j++) { Console.Write(inputChars[j]); } } } Console.ReadKey(); } }
逻辑拆解
这个实现的核心思路是从后往前找单词边界,正向输出每个单词:
- 首先把输入字符串转成字符数组,方便逐个访问每个字符
- 用
wordEndIndex记录当前要输出的单词的最后一个字符索引 - 外层for循环从字符串末尾开始向前扫:
- 当遇到空格时,说明
i+1到wordEndIndex是一个完整的单词,用内层for循环把这个单词按原顺序输出,然后输出空格,再更新wordEndIndex到空格的前一位 - 当遍历到字符串第一个字符时,直接输出从0到
wordEndIndex的字符,也就是原句的第一个单词(现在是最后一个输出的)
- 当遇到空格时,说明
关于你提供的代码片段的小建议
你给出的片段里用到了数组b和c来反转字符再反转回来,其实有点绕。上面的实现直接定位单词边界输出,逻辑更清晰,也避免了额外数组的开销,而且能正确处理所有单词(包括开头和结尾的情况)。
运行上面的代码,输入I'm Learning c#就会输出c# Learning I'm,完全符合你的需求!
内容的提问来源于stack exchange,提问作者Akhil
相关产品推荐
相关产品推荐

