Переписать код с Pascal (работа со строками) - C#

Узнай цену своей работы

Формулировка задачи:

Function MaxBorder(S:String):Word;
 Var i, j, br, n:Word;
 Begin
  n:=Length(S);{Вычисляем длину строки W.}
  br:=0;
  For i:=1 To n-1 Do Begin {Цикл по длине грани.}
   j:=n-i+1;
   While (j<=t) And (S[i+j-n]=S[j]) Do j:=j+1; {Префикс и суффикс длины i совпадают?}
   If j=n+1 Then br:=i;
  End;
  MaxBorder:=br;
 End;
 
Procedure MaxBorderArray(S:String); {Массив br глобальный.}
 Var i,n,t:Word;
 Begin
  n:=Length(S);
  br[1]:=0;
  For i:=2 To n Do
   br[i]:=MaxBorder(Copy(S,1,i)); {«Вырезаем» из S подстроку длины i, начиная с первого символа.}
 End;
Процедуру переписал не сложно.. Функция тупит или я туплю на паскале норм на шарпе за границы массива выходит
static void MaxBorderArray(string mba)
        {
            masbr[0] = 0;
            for (int i = 2; i < mba.Length; i++)
                masbr[i] = MaxBorder(mba.Substring(0,i));
        }

Решение задачи: «Переписать код с Pascal (работа со строками)»

textual
Листинг программы
static int MaxBorder(string S)
        {
            int br = 0, j, t, n = S.Length;
            t = n - 1;
            for (int i = 0; i < n - 1; i++)
            {
                j = t;
                while ((j < n) && (S[i + j - (n - 1)] == S[j]))
                    j++;
                if (j == n) br = i + 1;
                t--;
            }
            return br;
            
        }
        static void MaxBorderArray(string S)
        {
            masbr[0] = 0;
            for (int i = 1; i < S.Length; i++)
                masbr[i] = MaxBorder(S.Substring(0,i+1));
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.333 из 5
Похожие ответы