C#反名练习如何理解?

How to understand the C# reversed name exercise?

我想弄清楚这段代码是如何一步步执行的,以便更好地理解它。你在控制台中输入一个词,它会以相反的方式吐出这个词。

我可以按照代码进行操作,直到到达 array[name.Length - i] = name[i - 1];

var array = new char[name.Length];
for (var i = name.Length; i > 0; i--)
    array[name.Length - i] = name[i - 1];     <------

我不明白这一行代码的步骤是如何翻译的。为什么我们要从name.Length中减去1,然后再减去i所代表的它本身呢? name[i - 1] 中的 i 减 1 有什么作用?

循环从i开始等于name的长度,每次迭代从i减1。

所以在第一次迭代中,name.Length - i 等于 0,而 i-1 等于 name.Length -1
在下一次迭代中,name.Length - i 等于 1,而 i-1 等于 name.Length -2,依此类推。

通过将 name[x] 处的字符分配给 array[y],循环将每个字符从 name 数组复制到 array 数组 - 所以到循环时结束,array数组正好是name数组的反向拷贝。

我整理了一个small demo on rextester,大家可以看看运行.

请注意,这不是反转字符串的最佳方式,尤其是在非英语语言中。 某些语言使用由多个字符组成的字母,例如法语中的重音符,使用 Ç, é, â, ê, î, ô, û, à, è, ù, ë, ï and ü.

对于这些语言,简单地逐个字符反转会导致重音位于错误字母上的字符串。要获得正确的字符串反转,请查看 R. Martinho Fernandes 的 answer to this SO post.