Проблема с внесением данных в массив (C#)

Пишу программу, которая должна получать от пользователя строку (цифры и пробелы), отделять цифры от пробелов и вносить это в отдельный массив (int[]).

Дело в том, что при внесении данных в новый массив, туда залетают непонятные мне цифры (не те, которые указывает пользователь).

Просьба пояснить, почему происходит именно так, и каким образом это можно пофиксить.

Вывод:

Введите строку с цифрами, разделенную пробелами: 1 2

49 0

    static void Main(string[] args)
    {
        int number = 0;
        Console.Write("Введите строку с цифрами, разделенную пробелами: ");
        string str = Console.ReadLine();

        char[] array = str.ToCharArray();
        

        for (int i = 0; i < array.Length; i++)
        {
            if (Convert.ToString(array[i]) == " ")
            {
                continue;
            }
            else
            {
                number++;
            }
        }

        int[] array_int = new int[number];


        for (int i = 0; i < array_int.Length; i++)
        {
            if (Convert.ToString(array[i]) == " ")
            {
                continue;
            }
            else
            {
                array_int[i] = Convert.ToInt32(array[i]);
            }
        }

        for (int i = 0; i < array_int.Length; i++)
        {
            Console.WriteLine(array_int[i]);
        }
    }

Ответы (1 шт):

Автор решения: CrazyElf

У вас в новый массив попадают коды символов - так работает Convert.ToInt32() с аргументом Char.

  • Одно решение как это починить - вычесть код символа 0 из них (то есть отнять Convert.ToInt32('0')).

  • Другой вариант - преобразовывать array[i] из Char в String и тогда Convert.ToInt32() с аргументом в виде строки отработает так как вы хотите.

Документация на Convert.ToInt32

Update: У вас ещё и с нумерацией во втором цикле проблемы. Там тоже надо учитывать, что вы пробелы пропускаете, я исправил:

    int[] array_int = new int[number];
    number = 0; // добавил

    for (int i = 0; i < array.Length; i++)
    {
        if (Convert.ToString(array[i]) == " ")
        {
            continue;
        }
        else
        {
            array_int[number] = Convert.ToInt32(Convert.ToString(array[i])); // исправил
            number++; // добавил
        }
    }

Рабочий код, можно погонять, проверить

→ Ссылка