如何理解C#字符串反转练习?代码执行步骤解析求助
拆解C#字符串反转代码的核心逻辑
嘿,我来帮你把这段代码的执行逻辑拆解得明明白白,其实核心就是把原字符串的字符从后往前挨个挪到新数组的从前往后位置,咱们结合具体例子(比如输入的name是"Hello",长度为5)一步步捋:
首先看初始化部分:
var array = new char[name.Length];
这行代码创建了一个和原字符串长度完全相同的字符数组,用来存储反转后的结果——毕竟反转后的字符串长度和原字符串肯定是一样的对吧?
接下来是循环和赋值的核心:
for (var i = name.Length; i > 0; i--) array[name.Length - i] = name[i - 1];
咱们把这行赋值代码拆成两部分看,就懂为什么要做减法了:
1. name[i - 1]:从原字符串末尾往前取字符
C#里的字符串和数组都是0索引的——也就是第一个字符的索引是0,最后一个字符的索引是name.Length - 1。
- 当循环刚开始时,
i = name.Length(也就是5),i-1就等于4,刚好对应原字符串"Hello"的最后一个字符'o'; - 每循环一次i减1,
i-1就往前挪一个索引,直到i=1时,i-1=0,对应原字符串的第一个字符'H'。
说白了,这部分就是在从原字符串的末尾开始,逐个提取字符。
2. array[name.Length - i]:把字符放到新数组的正序位置
新数组array也是0索引的,我们需要把刚才从原字符串末尾取的字符,放到新数组的开头,依次往后填充:
- 当i=5时,
name.Length - i = 5-5=0,也就是新数组的第一个位置,把'o'放进去; - 当i=4时,
5-4=1,新数组的第二个位置放原字符串倒数第二个字符'l'; - 以此类推,直到i=1时,
5-1=4,新数组的最后一个位置放原字符串的第一个字符'H'。
具体执行步骤(以name="Hello"为例)
| i的值 | name[i-1](取到的字符) | array[name.Length - i](新数组的索引) | 赋值结果 |
|---|---|---|---|
| 5 | name[4] = 'o' | array[0] | array[0] = 'o' |
| 4 | name[3] = 'l' | array[1] | array[1] = 'l' |
| 3 | name[2] = 'l' | array[2] | array[2] = 'l' |
| 2 | name[1] = 'e' | array[3] | array[3] = 'e' |
| 1 | name[0] = 'H' | array[4] | array[4] = 'H' |
最后这个数组array就是['o','l','l','e','H'],转成字符串就是"olleH",完美实现了反转。
总结一下:这两个减法操作都是为了适配C#的0索引规则,让原字符串的逆序字符能刚好对应填充到新数组的正序位置,最终得到反转结果。
内容的提问来源于stack exchange,提问作者gusto
相关产品推荐
相关产品推荐

