反转字符串、数组
Reverse String, Array
C# code for reversing a string
这部分我没看懂
arr[name.Length - i] = name[i - 1];
让我们有 5 个字符的 name
。所以 arr
的值将是 4,对吗?
然后在循环中,循环变量也取相同的长度,所以它的初始值也将是4。
在第一次迭代中,arr[4 - 4]
的值将是arr[0]
,name[4 - 1]
将是name[3]
,所以arr
的第一个索引是用 name
.
的第四个索引复制
原来的名字在arr
中是如何倒序存储的?
static void Main(string[] args)
{
Console.Write("What is your name: ");
var name = Console.ReadLine();
var arr = new char[name.Length];
for (var i = name.Length; i > 0; i--)
arr[name.Length - i] = name[i - 1];
var reversed = new string(arr);
Console.WriteLine(reversed);
}
我在这里复制了原始代码的图像。
using System;
public class Program
{
public static void Main()
{
Console.WriteLine("What is your name? ");
string name = Console.ReadLine();
var arr = new char[name.Length];
for (var i = name.Length; i > 0; i--){
arr[name.Length -1] = name[i-1];
}
var reversed = new string(arr);
Console.WriteLine(reversed);
}
}
索引似乎有点偏离。您想要获取您输入的名称的长度(名称的末尾),并将字符从末尾开始返回到单词的开头。下面我更改了一些变量名,为代码添加更多含义。
public static void CorrectedMain()
{
Console.WriteLine("What is your name? ");
string name = Console.ReadLine();
char[] reversedLetters = new char[name.Length];
for (var i = name.Length; i > 0; i--){
reversedLetters[i-1] = name[name.Length -i ];
}
var reversed = new string(reversedLetters);
Console.WriteLine(reversed);
}
如果您在第一个块中输入 Thomas,您将得到 T,如果您 运行 在第二个块中输入代码,您将得到 samohT。
这是其中的一个 fiddle。
https://dotnetfiddle.net/txwyd1
回答你的问题:字符串和数组是零索引的。 IE。第一个元素位于索引 0。最后一个元素位于 Length - 1。
你例子中的代码写得不是很好。它打破了一些基本的编码原则。
- 迭代向前,除非有非常具体的需要向后移动。在这种情况下,没有。
- 在执行涉及字符串和数组的任何代码时使用从零开始的变量。
这个例子打破了这两个,我认为这是它难以阅读的部分原因,但让我们试试。
查看迭代,如果 Length 如您所建议的那样为 5,则 i 从 5 开始并下降到 1。当 i 为 5 时:(name.Length - i) = 0,并且 i - 1 = 4,所以数组索引0(数组中的第一个)得到位置4的字符(即第5个字符)。
在下一次迭代中,i 为 4:(name.Length - i) = 1,并且 i - 1 = 3,因此数组索引 1(数组中的第二个)获取位置处的字符3(第 4 个字符)。
以此类推
这是同一算法的稍微好一点的版本。希望它更容易阅读。
public static void Main()
{
Console.Write("What is your name: ");
string name = Console.ReadLine();
int n = name.Length;
char[] arr = new char[n];
for (int i = 0; i < n; i++)
arr[i] = name[n - 1 - i];
string reversed = new String(arr);
Console.WriteLine(reversed);
}
C# code for reversing a string
这部分我没看懂
arr[name.Length - i] = name[i - 1];
让我们有 5 个字符的 name
。所以 arr
的值将是 4,对吗?
然后在循环中,循环变量也取相同的长度,所以它的初始值也将是4。
在第一次迭代中,arr[4 - 4]
的值将是arr[0]
,name[4 - 1]
将是name[3]
,所以arr
的第一个索引是用 name
.
原来的名字在arr
中是如何倒序存储的?
static void Main(string[] args)
{
Console.Write("What is your name: ");
var name = Console.ReadLine();
var arr = new char[name.Length];
for (var i = name.Length; i > 0; i--)
arr[name.Length - i] = name[i - 1];
var reversed = new string(arr);
Console.WriteLine(reversed);
}
我在这里复制了原始代码的图像。
using System;
public class Program
{
public static void Main()
{
Console.WriteLine("What is your name? ");
string name = Console.ReadLine();
var arr = new char[name.Length];
for (var i = name.Length; i > 0; i--){
arr[name.Length -1] = name[i-1];
}
var reversed = new string(arr);
Console.WriteLine(reversed);
}
}
索引似乎有点偏离。您想要获取您输入的名称的长度(名称的末尾),并将字符从末尾开始返回到单词的开头。下面我更改了一些变量名,为代码添加更多含义。
public static void CorrectedMain()
{
Console.WriteLine("What is your name? ");
string name = Console.ReadLine();
char[] reversedLetters = new char[name.Length];
for (var i = name.Length; i > 0; i--){
reversedLetters[i-1] = name[name.Length -i ];
}
var reversed = new string(reversedLetters);
Console.WriteLine(reversed);
}
如果您在第一个块中输入 Thomas,您将得到 T,如果您 运行 在第二个块中输入代码,您将得到 samohT。
这是其中的一个 fiddle。 https://dotnetfiddle.net/txwyd1
回答你的问题:字符串和数组是零索引的。 IE。第一个元素位于索引 0。最后一个元素位于 Length - 1。
你例子中的代码写得不是很好。它打破了一些基本的编码原则。
- 迭代向前,除非有非常具体的需要向后移动。在这种情况下,没有。
- 在执行涉及字符串和数组的任何代码时使用从零开始的变量。
这个例子打破了这两个,我认为这是它难以阅读的部分原因,但让我们试试。
查看迭代,如果 Length 如您所建议的那样为 5,则 i 从 5 开始并下降到 1。当 i 为 5 时:(name.Length - i) = 0,并且 i - 1 = 4,所以数组索引0(数组中的第一个)得到位置4的字符(即第5个字符)。
在下一次迭代中,i 为 4:(name.Length - i) = 1,并且 i - 1 = 3,因此数组索引 1(数组中的第二个)获取位置处的字符3(第 4 个字符)。
以此类推
这是同一算法的稍微好一点的版本。希望它更容易阅读。
public static void Main()
{
Console.Write("What is your name: ");
string name = Console.ReadLine();
int n = name.Length;
char[] arr = new char[n];
for (int i = 0; i < n; i++)
arr[i] = name[n - 1 - i];
string reversed = new String(arr);
Console.WriteLine(reversed);
}