微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

反转字符串、数组

如何解决反转字符串、数组

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。

您示例中的代码编写得不是很好。它打破了一些基本的编码原则。

  1. 向前迭代,除非有非常特殊的需要向后移动。在这种情况下,没有。
  2. 在执行任何涉及字符串和数组的代码时使用从零开始的变量。

这个例子打破了这两点,我认为这是它难以阅读的部分原因,但让我们尝试一下。

看看迭代,如果 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 举报,一经查实,本站将立刻删除。