Как целочисленные числа из строки записать в целочисленный массив?
Дана такая задача: написать программу со статическим методом, определяющим позиции, на которых в тексте находится определенный символ. Аргументами методу передаётся текст и символ. Результатом метод возвращается целочисленный массив, значения элементов которого - это индексы позиций, на которых символ находится в тексте. Если символ в тексте не встречается, то метод результатом возвращает массив из одного элемента, значение которого равно -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 массива и возвратить на место вызова метода.
- не знаю как можно бы было сразу записывать индекс в массив, т.к у нас неизвестное кол-во совпадений.(про list и add знаю, но тут нужно именно array массив) 2.такие штуки -> не проходил. 3.Вообще данная задача относится к теме методы string, и соответственно желательно именно ими и решить. Без linq, указателей.
Ответы (1 шт):
Под Ваши требования подходит приведенное решение. Суть в том, чтобы найти кол-во символов 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;
}