C# 将字符串转换为多维数组
我有一个矩阵,它是从控制台读取的。元素由空格和新线分隔。如何将其转换为c#中的多维整数数组?我试过:C# 将字符串转换为多维数组,c#,arrays,multidimensional-array,C#,Arrays,Multidimensional Array,我有一个矩阵,它是从控制台读取的。元素由空格和新线分隔。如何将其转换为c#中的多维整数数组?我试过: String[][] matrix = (Console.ReadLine()).Split( '\n' ).Select( t => t.Split( ' ' ) ).ToArray(); 但是,当我单击enter时,程序结束,它不允许我输入更多行 例如: 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9 首先,Console.R
String[][] matrix = (Console.ReadLine()).Split( '\n' ).Select( t => t.Split( ' ' ) ).ToArray();
但是,当我单击enter时,程序结束,它不允许我输入更多行
例如:
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
首先,
Console.ReadLine()
从输入中读取一行。因此,为了接受多行,您需要做两件事:
List<string> inputs = new List<string>();
var endInput = false;
while(!endInput)
{
var currentInput = Console.ReadLine();
if(String.IsNullOrWhitespace(currentInput))
{
endInput = true;
}
else
{
inputs.Add(currentInput);
}
}
// when code continues here you have all the user's input in separate entries in "inputs"
这将为您提供一个字符串数组(您的示例就是这样)。如果您希望这些是整数,可以边走边解析:
var result = inputs.Select(i => i.Split(' ').Select(v => int.Parse(v)).ToArray()).ToArray();
这可以通过多种方式实现 您可以读取包含多个数字的单行,这些数字由一个字符分隔,由该字符分割,获得一个整数数组,然后您应该获取一个矩阵 对于开箱即用的linq,获取步骤没有简单的方法,我认为使用来自codeplex的第三方库(如LinqLib或其他东西)并不是真正的情况。
int[,]Matrix=new int[n_行,n_列];
int[,] Matrix = new int[n_rows,n_columns];
for(int i=0;i<n_rows;i++){
String input=Console.ReadLine();
String[] inputs=input.Split(' ');
for(int j=0;j<n_columns;j++){
Matrix[i,j]=Convert.ToInt32(inputs[j]);
}
}
对于(int i=0;i这是什么语言(将它添加到标记中)?您也只阅读了一行。也许我离开控制台应用程序太久了,但是您如何在控制台中接受\n
。ReadLine
?读取不是在\n
?@bradcristie-通过接受多个控制台。ReadLine()
“在loop@Jamiec:或者,答案是:“您无法通过读线接受”。问题是关于如何从控制台输入矩阵,或者如何将字符串
数组转换为int
数组?请澄清您的问题。
// incoming single-string matrix:
String input = @"1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9";
// processing:
String[][] result = input
// Divide in to rows by \n or \r (but remove empty entries)
.Split(new[]{ '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries)
// no divide each row into columns based on spaces
.Select(x => x.Split(new[]{ ' ' }, StringSplitOptions.RemoveEmptyEntries))
// case from IEnumerable<String[]> to String[][]
.ToArray();
String[][] result = new string[]{
new string[]{ "1","2","3","4","5" },
new string[]{ "2","3","4","5","6" },
new string[]{ "3","4","5","6","7" },
new string[]{ "4","5","6","7","8" },
new string[]{ "5","6","7","8","9" }
};
int[,] Matrix = new int[n_rows,n_columns];
for(int i=0;i<n_rows;i++){
String input=Console.ReadLine();
String[] inputs=input.Split(' ');
for(int j=0;j<n_columns;j++){
Matrix[i,j]=Convert.ToInt32(inputs[j]);
}
}