简体   繁体   中英

Call-time pass-by-reference

There is Fatal Error in this code:

Call-time pass-by-reference has been removed on line 108. this is Boyer Moore Algorithm

function suffixes($pattern, &$suffixes)
{
   $m = strlen($pattern);

   $suffixes[$m - 1] = $m;
   $g = $m - 1;

   for ($i = $m - 2; $i >= 0; --$i) {
      if ($i > $g && $suffixes[$i + $m - 1 - $f] < $i - $g) {
         $suffixes[$i] = $suffixes[$i + $m - 1 - $f];
      } else {
         if ($i < $g) {
            $g = $i;
         }
         $f = $i;

         while ($g >= 0 && $pattern[$g] == $pattern[$g + $m - 1 - $f]) {
            $g--;
         }
         $suffixes[$i] = $f - $g;
      }
   }
}

function badCharacters

 function badCharacters($pattern, &$badChars)
    {
       $m = strlen($pattern);

       for ($i = 0; $i < $m - 1; ++$i) {
          $badChars[$pattern{$i}] = $m - $i - 1;
       }
    }

function goodSuffixes

function goodSuffixes($pattern, &$goodSuffixes)
{
   $m       = strlen($pattern);
   $suff    = array();

   suffixes($pattern, $suff);

   for ($i = 0; $i < $m; $i++) {
      $goodSuffixes[$i] = $m;
   }

   for ($i = $m - 1; $i >= 0; $i--) {
      if ($suff[$i] == $i + 1) {
         for ($j = 0; $j < $m - $i - 1; $j++) {
            if ($goodSuffixes[$j] == $m) {
               $goodSuffixes[$j] = $m - $i - 1;
            }
         }
      }
   }

   for ($i = 0; $i < $m - 2; $i++) {
      $goodSuffixes[$m - 1 - $suff[$i]] = $m - $i - 1;
   }
}

function boyer_moore

function boyer_moore($pattern, $text)
{
   $n = strlen($text);
   $m = strlen($pattern);

   $goodSuffixes    = array();
   $badCharacters   = array();

 //this is the line 108
   goodSuffixes($pattern, &$goodSuffixes);
   badCharacters($pattern, &$badCharacters);

   $j = 0;
   while ($j < $n - $m) {
      for ($i = $m - 1; $i >= 0 && $pattern[$i] == $text[$i + $j]; $i--);
      if ($i < 0) {
         echo $j;
         $j += $goodSuffixes[0];
      } else {
         $j += max($goodSuffixes[$i], $badCharacters[$text[$i + $j]] - $m + $i + 1);
      }
   }
}

boyer_moore($pattern, $text);

What is causing this error?

It's clear from the error message:

goodSuffixes($pattern, &$goodSuffixes);
badCharacters($pattern, &$badCharacters);

The '&' is the character that is attempting to pass by reference at calltime. Remove the '&' from in front of the 2 variable names.

goodSuffixes($pattern, $goodSuffixes);
badCharacters($pattern, $badCharacters);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM