0

Я решил написать собственую функцию MySubstring. Но я не уверен что правильно все сделал + в меине выдает ошибку что я не могу так записывать

string mySubstring = MySubstring(str1, 3, 3);

Код:

string MySubstring(string str, int startIndex, int length)
{
    string temp = System.String.Empty;
    for (int index = 0; index < str.Length; ++index)
    {
       if (str[index] == startIndex)
       {
          for (int j = 0; j < length; ++j)
          {
             temp += str[index];
          }
       }
    }
    return temp;
}
static void Main(string[] args)
{
   string str1 = "I like it like that";
   string mySubstring = MySubstring(str1, 3, 3);
   System.Console.WriteLine(mySubstring);
}
  • Добавьте static к своей функции. – Alexander Petrov Jan 11 '19 at 08:45
  • @AlexanderPetrov спасибо, но теперь другая проблема в консольничего не выводится и я не знаю праильно ли я написал функцию – Vova Makarovych Jan 11 '19 at 08:47
  • Вы наступаете на одни и те же грабли: https://ru.stackoverflow.com/q/930455/218063 – Андрей NOP Jan 11 '19 at 08:56
  • temp += str[index+j]; – tym32167 Jan 11 '19 at 08:59
  • str[index] == startIndex — это выглядит странно, потому что str[index] — это символ, который находится в позиции index в строке. Ну и вложенный цикл не нужен, достаточно одного цикла от 0 до length – Андрей NOP Jan 11 '19 at 08:59
  • но и вы же понимаете, что это temp += str[index+j]; будет каждый раз создавать новую строку? То есть эффективности тут нет никакой. – tym32167 Jan 11 '19 at 09:00
  • @tym32167 а как сделать чтобы была ефективность? – Vova Makarovych Jan 11 '19 at 09:13
  • @АндрейNOP не совсем понял как с одним фором сделать. мне же надо по всему стрингу пройтись... – Vova Makarovych Jan 11 '19 at 09:14
  • Зачем вам проходить по всей строке, если вы можете начать сразу с нужного индекса: for (int index = startIndex; index < length+startIndex; ++index) temp += str[index]; – Андрей NOP Jan 11 '19 at 09:16
  • Собрать строку из массива символов или использовать StringBuilder или глядите реализацию Substring – tym32167 Jan 11 '19 at 09:22
  • @tym32167, в реализации используется небезопасное копирование памяти, зачем ТС это смотреть? Он же не плюсы изучает... :) – Андрей NOP Jan 11 '19 at 09:25
  • @АндрейNOP ну я же на один, а аж 3 варианта ему кинул, пусть смотрит какой хочет :) – tym32167 Jan 11 '19 at 09:31
  • По поводу "а хочу чтобы код работал для всех случаив": пока в вопросе явного не будут озвучены все случаи -- вопрос нужно будет закрывать, а не играть в телепатов, логично? Продумывайте все кейсы, правьте вопрос, переоткрывайте заново -- будет вам ответ. – A K Jan 12 '19 at 12:51

1 Answers1

0

Скорее всего для вас будет интересен метод расширение. Пример кода

public static class StringExtensions
{
    public static string MySubstring(this string str, int startIndex, int length)
    {
        string temp = string.Empty;
        for (int index = 0; index < str.Length; ++index)
        {
            if (index == startIndex)
            {
                for (int j = index; j < length + index; ++j)
                {
                    temp += str[j];
                }
                return temp;
            }
        }
        return temp;
    }
}
class Program
{
    static void Main(string[] args)
    {
        string template = "привет мир!";
        var result = template.MySubstring(2, 5);
    }
}

зы. как заметили в одном из комментариев, чтобы не потерять много в производительности, следует использовтаь StringBuilder

пример кода с созданием метода в классе Program

class Program
{
    static void Main(string[] args)
    {
        string template = "привет мир!";
        var result = MySubstring(template, 2, 5);
    }

    static string MySubstring(string str, int startIndex, int length)
    {
        string temp = string.Empty;
        for (int index = 0; index < str.Length; ++index)
        {
            if (index == startIndex)
            {
                for (int j = index; j < length + index; ++j)
                {
                    temp += str[j];
                }
                return temp;
            }
        }
        return temp;
    }
}

зы. производительный(и правильный) метод будет выглядеть так

    static string MySubstring(string str, int startIndex, int length)
    {
        StringBuilder sb = new StringBuilder(length);

        for (int index = startIndex; index < length + startIndex; ++index)
        {
            sb.Append(str[index]);
        }
        return sb.ToString();
    }
pasha goroshko
  • 483
  • 3
  • 8