分隔数字数组中的数字 C#
separating number in array of digits C#
我是编程新手,目前只练习 C#。所以我的问题是:我试图用数组分隔数字中的数字(例如:数字 12345 到数字 {1,2,3,4,5})。我做了一些代码,这是它:
int num = int.Parse(Console.ReadLine());
int[] digits = new int[3];
int separatedDigit = 0;
for (int i = num; num != 0; i--)
{
digits[i] = num % 10;
num = num / 10;
}
但它显示错误“索引超出了数组的范围。”我想问题出在 "for" 部分,因为它从位置 3 开始并且数组只有 2 (0, 1, 2)。我不知道如何解决它,所以有人可以帮助我吗?
尝试 Linq:过滤掉 '0'
..'9'
个字符并将它们 具体化 到数组中:
int[] digits = Console
.ReadLine()
.Where(c => c >= '0' && c <= '9') // '0'..'9' characters only
.Select(c => c - '0') // '0' should correspond to 0 integer
.ToArray();
i
开始等于 num
,而 num
又开始为您输入的数字,它可以远大于 3。例如,如果我输入 123
作为输入数字,然后循环首先尝试访问 digits[123]
,这是 waaaaaay 在该数组范围之外。
您需要调整 for 循环以使 i
以更合理的数字开始:
for (int i = digits.Length - 1; num != 0; i--)
{
// ...
或者,您可以 i
从 0 开始,然后逐步提高:
for (int i = 0; num != 0; i++)
{
// ...
问题是您在初始化数组时没有分配正确数量的空格,例如在下面的代码行中:
int[] digits = new int[3];.. 相反,您应该首先读取输入,计算输入的数字(字符)的数量,然后分配具有该数量元素的数组。请记住,数组从索引为 0.. 所以在您的示例中,第一个字符(数字)将在数字 [0].. 然后数字[1]...数字[2].. 等处输入,从循环内直到所有数字已输入
试试这个代码:
string numberSequence = Console.ReadLine();
var numberCount = numberSequence.Length;
int[] digitArray = new int[numberCount];
int i = 0;
foreach (var number in numberSequence)
{
digitArray[i] = number;
Console.WriteLine(number);
i++;
}
Console.ReadLine();
试试这个
int _num = 12345;
var g = _num.ToString().Select(x => int.Parse(x.ToString())).ToArray<int>();
试试这个
string strValue = "19345abc#/";
char[] charArray = strValue.ToCharArray();
List<int> list = new List<int>();
for (int i = 0; i < charArray.Length; i++)
{
if (char.IsNumber(charArray[i]))
{
list.Add(charArray[i] - '0');
}
}
我是编程新手,目前只练习 C#。所以我的问题是:我试图用数组分隔数字中的数字(例如:数字 12345 到数字 {1,2,3,4,5})。我做了一些代码,这是它:
int num = int.Parse(Console.ReadLine());
int[] digits = new int[3];
int separatedDigit = 0;
for (int i = num; num != 0; i--)
{
digits[i] = num % 10;
num = num / 10;
}
但它显示错误“索引超出了数组的范围。”我想问题出在 "for" 部分,因为它从位置 3 开始并且数组只有 2 (0, 1, 2)。我不知道如何解决它,所以有人可以帮助我吗?
尝试 Linq:过滤掉 '0'
..'9'
个字符并将它们 具体化 到数组中:
int[] digits = Console
.ReadLine()
.Where(c => c >= '0' && c <= '9') // '0'..'9' characters only
.Select(c => c - '0') // '0' should correspond to 0 integer
.ToArray();
i
开始等于 num
,而 num
又开始为您输入的数字,它可以远大于 3。例如,如果我输入 123
作为输入数字,然后循环首先尝试访问 digits[123]
,这是 waaaaaay 在该数组范围之外。
您需要调整 for 循环以使 i
以更合理的数字开始:
for (int i = digits.Length - 1; num != 0; i--)
{
// ...
或者,您可以 i
从 0 开始,然后逐步提高:
for (int i = 0; num != 0; i++)
{
// ...
问题是您在初始化数组时没有分配正确数量的空格,例如在下面的代码行中: int[] digits = new int[3];.. 相反,您应该首先读取输入,计算输入的数字(字符)的数量,然后分配具有该数量元素的数组。请记住,数组从索引为 0.. 所以在您的示例中,第一个字符(数字)将在数字 [0].. 然后数字[1]...数字[2].. 等处输入,从循环内直到所有数字已输入
试试这个代码:
string numberSequence = Console.ReadLine();
var numberCount = numberSequence.Length;
int[] digitArray = new int[numberCount];
int i = 0;
foreach (var number in numberSequence)
{
digitArray[i] = number;
Console.WriteLine(number);
i++;
}
Console.ReadLine();
试试这个
int _num = 12345;
var g = _num.ToString().Select(x => int.Parse(x.ToString())).ToArray<int>();
试试这个
string strValue = "19345abc#/";
char[] charArray = strValue.ToCharArray();
List<int> list = new List<int>();
for (int i = 0; i < charArray.Length; i++)
{
if (char.IsNumber(charArray[i]))
{
list.Add(charArray[i] - '0');
}
}