首页 > 解决方案 > 反转字符串、数组

问题描述

用于反转字符串的 C# 代码

我无法理解这部分

arr[name.Length - i] = name[i - 1];

让我们有name5 个字符。所以arrwill 的值是 4,对吧?

然后在循环中,循环变量也采用相同的长度,所以它的初始值也将是 4。

在第一次迭代中, will 的值arr[4 - 4]将是arr[0],因此 的第一个索引与 的第四个索引一起复制。name[4 - 1]name[3]arrname

原名是如何倒序存储的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);
        }

标签: c#arraysstringreverse

解决方案


我在这里复制了原始代码的图像。

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


推荐阅读