Galin Dimitrov
Galin Dimitrov

Reputation: 13

separating number in array of digits C#

i am new in programming and for now only practicing with C#. So my problem is: i am trying to separate a number in a digits with array (example: number 12345 in to digits {1,2,3,4,5}). I make some code, here is it:

  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;

        }

but it shows me error " Index was outside the bounds of the array." I suppose the problem is coming from that "for" part because it starts from position 3 and the array have only 2 (0, 1, 2). I don't know how to fix it, so can someone help me?

Upvotes: 0

Views: 547

Answers (5)

HonourCode
HonourCode

Reputation: 308

The problem is that you haven't allocated the correct number of spaces when initialising the array, for example in the following line of code: int[] digits = new int[3];.. Instead you should first read the input, calculate the number of numbers (characters) that were input and then allocate an array with that number of elements.. Remember that arrays start at the index of 0.. so in your example the first character (number) would be entered at digits[0].. then digits[1]... digit[2].. etc.. from within the loop until all the numbers have been input.

Try this code:

    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();

Upvotes: 0

Shaahin
Shaahin

Reputation: 1225

Try this

 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');
         }
     }

Upvotes: 0

Anu Viswan
Anu Viswan

Reputation: 18155

Try this

        int _num = 12345;
        var g = _num.ToString().Select(x => int.Parse(x.ToString())).ToArray<int>();

Upvotes: 0

Abion47
Abion47

Reputation: 24661

i starts out as equal to num, which in turn starts out as the number that you entered, which can be far greater than 3. For example, if I put in 123 as the input number, then the loop first tries to access digits[123] which is waaaaaay outside the bounds of that array.

You're going to want to tweak your for loop to get i to start at a more reasonable number:

for (int i = digits.Length - 1; num != 0; i--)
{
    // ...

Alternatively, you could start i at 0 and work your way up:

for (int i = 0; num != 0; i++)
{
    // ...

Upvotes: 0

Dmitrii Bychenko
Dmitrii Bychenko

Reputation: 186668

Try Linq: filter out '0'..'9' characters and materialize them into array:

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();

Upvotes: 1

Related Questions