【问题标题】:reverse list with inputData [duplicate]带有 inputData 的反向列表 [重复]
【发布时间】:2021-01-25 18:41:15
【问题描述】:

我想用console.ReadLine() 反转一个数组,但我卡住了。
这是问题的陈述。

给出一个由 10 个自然数组成的数组。以相反的顺序显示字符串中的数字。

字符串中的数字在一行中给出,并用空格分隔。应用程序将在一行中显示数字,它们之间用空格分隔。

例子:

对于输入数据:

1 2 3 4 5 6 7 8 9 10

控制台会显示:

10 9 8 7 6 5 4 3 2 1

这是我的代码:

string number = Convert.ToString(Console.ReadLine());

List<string> originalList = new List<string>();

for (int i = 0; i < 1; i++)
{
    originalList.Add(number);
}
foreach (string item in originalList)
{
    Console.Write(item + " ");
}
originalList.Reverse();

foreach (string item in originalList)
{
    Console.WriteLine(item + " ");
}
Console.WriteLine();

【问题讨论】:

  • 只能使用string.Split (' '),否则使用forwhile 对字符串字符进行循环

标签: c# reverse


【解决方案1】:

字符串中的数字在一行中给出,并用空格分隔。

以下代码不正确,因为Console.ReadLine 在遇到空格时不会停止读取。它会将整个输入作为originalList 中的一个条目来使用。

string number = Convert.ToString(Console.ReadLine());

List<string> originalList = new List<string>();

for (int i = 0; i < 1; i++)
{
    originalList.Add(number);
}

// originalList is now [ "1 2 3..." ];

相反,您应该查看String.Split

string input = Console.ReadLine();

List<string> originalList = input.Split(' ').ToList();

// originalList is now [ "1", "2", "3", ... ];

您现在可以使用List.ReverseString.Join 来获取您的输出。

originalList.Reverse();

string output = string.Join(' ', originalList);

Console.WriteLine(output);

【讨论】:

    【解决方案2】:

    需要string.Split (' ')for 循环或while 循环

    使用string.Split (' ')

    string [] splitArray = number.Split (' ');
    for (int i = 0; i < splitArray.Length; i++)
    {
        originalList.Add(splitArray [i]);
    }
    //rest of the code would be same
    

    For循环

    String readvalues="";
    for (int i=0;i <number.Length;i++)
    {
        if (i==number Length-1)
        {
            readvalues += number [i];
        }
        if (number[i]==" " || i==number.Length-1)
        {
            originalList.Add (readvalues);
            readvalues="";
        }
        else
        {
            readvalues += number [i];
        }
    }
    //rest of the code would be same
    

    While循环

    int index=0;
    String readvalues="";
    while (index < number.Length)
    {
        if (index==number.Length-1)
        {
            readvalues += number [index];
        }
        if (number[index]==" " ||index==number.Length-1)
        {
            originalList.Add (readvalues);
            readvalues="";
        }
        else
        {
            readvalues += number [index];
        }
        index++;
    }
    //rest of the code would be same
    

    【讨论】:

      【解决方案3】:

      我想,我有一个适合你的解决方案,正是你所要求的。请检查代码并告诉我=>

      void Test()
      {
              string number = Convert.ToString(Console.ReadLine());
              List<string> originalList = new List<string>();
      
              if(!string.IsNullOrEmpty(number) && !string.IsNullOrWhiteSpace(number) )
              {
                  originalList=number.Split(" ").ToList();
                  originalList.Reverse();
                  Console.WriteLine(string.Join(" ", originalList));
              } 
      }
      

      注意:使用这三个命名空间using System;,using System.Linq;,using System.Collections.Generic;

      【讨论】:

        【解决方案4】:

        您可以尝试在 Linq (Reverse) 的帮助下查询初始字符串:

        代码:

          using System.Linq;
        
          ...
        
          // For Test (comment it out for release)
          string source = "1 2 3 4 5 6 7 8 9 10";
        
          // Uncomment for release 
          // string source = Console.ReadLine();
        
          string result = string.Join(" ", source
            .Split(' ', StringSplitOptions.RemoveEmptyEntries)
            .Reverse());
        
          Console.WriteLine(result);
        

        结果:

          10 9 8 7 6 5 4 3 2 1
        

        【讨论】:

          猜你喜欢
          • 2020-09-28
          • 2022-09-25
          • 2013-01-08
          • 2012-11-11
          • 2020-07-29
          • 1970-01-01
          • 2020-05-26
          • 1970-01-01
          • 2018-03-22
          相关资源
          最近更新 更多