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.
我想弄清楚这段代码是如何一步步执行的,以便更好地理解它。你在控制台中输入一个词,它会以相反的方式吐出这个词。
我可以按照代码进行操作,直到到达 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.