如何解决反转字符串、数组
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);
}
解决方法
我在这里复制了原始代码的图像。
ipython-input-34-35752ede55c7> in myfunction(input)
56 mydict = {}
57 for s in d:
---> 58 vals = set(sum(units[s],[]))-{s}
59 mydict[s] = vals
60
KeyError: 'A1'
看起来索引有点少。您想要获取您输入的名称的长度(它的结尾)并将字符从结尾开始返回到单词的开头。下面我更改了一些变量名称,为代码添加了更多含义。
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);
}
}
如果您在第一个块中输入 Thomas,您将返回 T,如果您在第二个块中运行代码,您将返回 samohT。
这是一个小提琴。 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);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。