c# - C#反名练习如何理解?

标签 c# reverse

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

我可以按照代码直到到达 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 的 answerthis SO post .

关于c# - C#反名练习如何理解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50111530/

相关文章:

javascript反转值的顺序

java - 在没有 StringBuilder 的情况下反转 Java 中的字符串

c# - 无法原始打印到 RDP 重定向打印机

c# - 如何在不切换选项卡的情况下处理 Selenium 中的多个选项卡

c# - 如何从 .net 核心客户端生成 JWT Bearer Flow OAuth 访问 token ?

python - 反转 DataFrame 列顺序

C 不将字符复制到新数组中

c# - 在 C# 中检查堆完整性和堆栈大小

c# - 为模型创建一个通用的 Save() 方法

common-lisp - Lisp 没有反转我的列表