【问题标题】:C# Formatting a text file character by character into a 2D array in GUIC#在GUI中将文本文件逐个字符格式化为二维数组
【发布时间】:2019-03-05 18:51:03
【问题描述】:

我有一个文本文件:

Berzas,sula;;sula;;klevu saldial lapasula a aila, ar suart zemes vaikai du

我需要将其格式化为具有[n, n] 维度的二维数组。它必须是二维数组,我不能使用列表

这是我已经尝试过的:

string file = File.ReadAllText(@"C:\Users\Justas\Desktop\L1\Rekursija\Trecias.txt");

int n = 0;

while (Math.Pow(n, 2) != file.Length)  
{
    n++;
}

string[,] array = new string[n, n];

var list = Enumerable
.Range(0, file.Length / n)
.Select(i => file.Substring(i * n, n))
.ToList();
var res = string.Join(Environment.NewLine, list);


for (int i = 0; i < n; i++)
{
    for (int j = 0; j < n; j++)
    {
        array[i, j] = res[i].ToString()[j].ToString();
    }
}

我尝试每 9 个位置添加一个新行,然后将其添加到二维数组中。

这是错误信息:

未处理的异常:System.IndexOutOfRangeException:索引超出了数组的范围。 在 System.String.get_Chars(Int32 索引) 在 C:\Users\Justas\Desktop\Bandymas\ConsoleApp1\Program.cs:line 37 中的 ConsoleApp1.Program.Main(String[] args) 处

预期输出:

Berzas,su
la;;sula;
;klevu sa
ldial lap
asula  a 
  aula, a
r  suart 
zemes vai
kai du   

【问题讨论】:

  • 请更详细地描述输入与所需输出的关系。
  • while 条件 Math.Pow(n, 2) != file.Length 会让你陷入无限循环。
  • 您的预期输出是什么?
  • 为什么不直接使用列表呢?而不是 string[,] array = new string[n, n] 你可以简单地做 List&lt;List&lt;string&gt;&gt; array = new List&lt;List&lt;string&gt;&gt;(); 消除需要指定大小
  • @MindSwipe 这是一个作业,我不能使用列表,它必须是一个二维数组

标签: c# arrays user-interface matrix


【解决方案1】:

您创建一个列表,然后将该列表再次转换为字符串。这是错误的。

在下面的代码中,我使用了您的列表值并对每个列表元素应用拆分方法。

然后我获取所有 char 值并将它们放入数组中。

在代码的最后一段中,我打印数组结果。 您可以从那里检查数组值。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
            //Your code goes here
            Console.WriteLine("Hello, world!");
            string file = "Berzas,sula;;sula;;klevu saldial lapasula a aila, ar suart zemes vaikai du       ";
            int n = 0;
            while (Math.Pow(n, 2) != file.Length)  
            {
                n++;
            }

            string[,] array = new string[n, n];

            var list = Enumerable
            .Range(0, file.Length / n)
            .Select(i => file.Substring(i * n, n))
            .ToList();

            var res = string.Join(Environment.NewLine, list);
            for (int i = 0; i < n; i++)
            {
                char[] row = list[i].ToCharArray();
                for (int j = 0; j < n; j++)
                {
                    array[i, j] = row[j].ToString();
                }
            }

            int rowLength = array.GetLength(0);
            int colLength = array.GetLength(1);
            for (int i = 0; i < rowLength; i++)
            {
                for (int j = 0; j < colLength; j++)
                {
                    Console.Write(string.Format("{0}", array[i, j]));
                }
                Console.Write(Environment.NewLine);
            }

        }
    }
}

【讨论】:

    猜你喜欢
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    • 2019-09-02
    • 2015-11-21
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多