Как целочисленные числа из строки записать в целочисленный массив?

Дана такая задача: написать программу со статическим методом, определяющим позиции, на которых в тексте находится определенный символ. Аргументами методу передаётся текст и символ. Результатом метод возвращается целочисленный массив, значения элементов которого - это индексы позиций, на которых символ находится в тексте. Если символ в тексте не встречается, то метод результатом возвращает массив из одного элемента, значение которого равно -1

Я данную задачу решил так

public static int[] Zad5(string str,char symb)
    {
        
        int value = 0;
        int iter = 0;
        
        string index = null;
        
        while(true)
        {
            value = str.IndexOf(symb,value);
            if(value != -1)
            {
              index = value + " ";
              value++;  
            }else break;
            
            iter++;
                        
        }   
        if(iter == 0)return new int[]{-1};
        
        return new int[] {int.Parse(index.ToArray())};//тут запутался
            
        
    }

Поясняю. Индексы записываю в строку. Далее хочу строку превратить в значения анонимного int массива и возвратить на место вызова метода.

  1. не знаю как можно бы было сразу записывать индекс в массив, т.к у нас неизвестное кол-во совпадений.(про list и add знаю, но тут нужно именно array массив) 2.такие штуки -> не проходил. 3.Вообще данная задача относится к теме методы string, и соответственно желательно именно ими и решить. Без linq, указателей.

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

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

Под Ваши требования подходит приведенное решение. Суть в том, чтобы найти кол-во символов symb, путем разделения исходной строки на symb. Размер полученного массива подстрок и будет равен кол-ву вхождений символа symb за вычетом 1, так как символ делит строку как минимум на 2 подстроки.

static int[] Zad5(string str, char symb)
{
    // Определяем кол-во искомых букв в строке, путем 
    // ее разделения на symb. Количество Length - 1, 
    // потому что одна буква делит строку, 
    // как минимум на 2 части. 
    int count = str.Split(symb).Length - 1;

    // Если таких букв нет, то возвращаем массив с -1
    if (count == 0)
    {
        return new int[] { -1 };
    }

    // Создаем массив для результатов
    int[] result = new int[count];

    // Ищем индексы в исходной строке и
    // записываем результаты в массив result
    for (int i = 0, j = 0; i < str.Length; i++)
    {
        if (str[i] == symb)
        {
            result[j++] = i;
        }
    }

    return result;
}
→ Ссылка