Как рекурсивно найти символ в строке, передавая в параметры только строку и символ
Только начинаю шаги в программировании, пытаюсь освоить c#. Сей час пытаюсь разобраться в рекурсии. Что бы дело пошло, нужно решить задачку: есть строка str и искомая буква value. Нужно найти эту букву в строке и вывести ее позицию. Встроенными функциями string пользоваться запрещено. Естественно все нужно делать через рекурсию. Вот что я написал, но оно не особо работает.
public static int GetIndexOfChar(string str, char value)
{
if (str is null)
{
throw new ArgumentNullException(nameof(str));
}
if (string.IsNullOrEmpty(str))
{
Console.WriteLine("-1");
}
int startIndex = str.Length - (str.Length - 1);
if (startIndex >= str.Length)
{
Console.WriteLine("0");
}
if (str[startIndex] == value)
{
Console.WriteLine(startIndex);
}
return GetIndexOfChar(str[startIndex++..], value);
}
Задачу нужно решать именно "спереди" строки, т.е. икать элемент от 1-го символа к концу. Вот я и не могу придумать, как это реализовать. Через циклы пробовал - задание не проходит проверку, нужно именно рекурсия. Заранее спасибо за ответ.
Ответы (3 шт):
Ваш код просто не скомпилируется и в принципе там смысла я не понимаю особо. Вот пример с рекурсией, попробуйте разобраться
public static int GetIndexOfChar(string str, char value, int index = 0)
{
if (index >= (str?.Length ?? -1)) return -1;
if (str[index] == value) return index;
return GetIndexOfChar(str, value, index + 1);
}
по условию метод менять нельзя. Т.е. я не могу переписать его, добавив переменную index
public static int GetIndexOfChar(string str, char value)
{
int len = str?.Length ?? 0;
if (len == 0) return -1;
if (str[0] == value) return 0;
if (len == 1) return -1;
int res = GetIndexOfChar(str.substring(1), value);
return ((res == -1) ? -1 : res + 1);
}
как образец указан вот такой пример. Но о считает с конца строки
// TODO #1. Analyze the implementation of "GetLastIndexOfChar(string, char)" method, and implement the method using recursion.
// The method should return the position of a "value" char in the "str" string. If "str" string has no "value" char then returns -1.
public static int GetLastIndexOfChar(string str, char value)
{
if (str is null)
{
throw new ArgumentNullException(nameof(str));
}
if (string.IsNullOrEmpty(str))
{
return -1;
}
if (str[^1] == value)
{
return str.Length - 1;
}
return GetLastIndexRecursively.GetLastIndexOfChar(str[..^1], value);
}
Всем огромное спасибо за помощь. Но тернарный оператор - это пока не совсем мой уровень...