我试图弄清楚这段代码是如何一步步执行的,以便更好地理解它。你在控制台中输入一个词,它会以相反的方式吐出这个词。
我可以按照代码直到到达 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
。< br/>
在下一次迭代中,name.Length - i
等于 1,而 i-1
等于 name.Length -2
,依此类推。
通过将 name[x]
中的字符分配给 array[y]
,循环将 name
数组中的每个字符复制到array
数组 - 所以在循环结束时,array
数组恰好是 name
数组的反向副本。
我整理了一个 small demo on rextester ,所以您可以看到它正在运行。
请注意,这不是反转字符串的最佳方式,尤其是在非英语语言中。
某些语言使用由多个字符组成的字母,例如法语中的重音符,使用 Ç、é、â、ê、î、ô、û、à、è、ù、ë、ï 和ü.
对于这些 languanges,简单地按 char 反转 char 将导致重音位于错误字母上的字符串。要获得正确的字符串反转,请查看 R. Martinho Fernandes 的 answer至 this SO post .
关于c# - C#反名练习如何理解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50111530/