c# - 反转字符串、数组
问题描述
我无法理解这部分
arr[name.Length - i] = name[i - 1];
让我们有name
5 个字符。所以arr
will 的值是 4,对吧?
然后在循环中,循环变量也采用相同的长度,所以它的初始值也将是 4。
在第一次迭代中, will 的值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。
这是它的一个小提琴。 https://dotnetfiddle.net/txwyd1
推荐阅读
- python - 检查变量是否为正整数的最紧凑/Pythonic 方法,可能的变量类型是任何变量类型,包括布尔值
- sql-server - 三表连接的group by中的列中断总和
- python - 使用基本 python 将数字列表中的连续数字分组到元组列表中(不允许使用 itertools 或更多 itertools)
- python - PyCharm 无法调试 Qt5 (PySide2) 代码 - 错误“Shiboken.ObjectType”对象不可迭代
- javascript - Html 按钮无法触发与 Document.clear 同名的事件函数
- c - 使用归并排序的多线程
- groovy - soapUI Groovy 脚本中的意外标记
- javascript - 当超链接在数据源中时,单击按钮打开超链接
- firebase - 我需要使用颤振和 firebase 添加电子邮件/密码身份验证
- imagej - 如何从 imagej - fiji 中的交叉点数组重新创建边界?