Ошибка поиска букв в строке с PHP - PullRequest
0 голосов
/ 26 ноября 2018

Я строю проект колледжа, лексический анализатор.

Я смог собрать всю структуру, но мой учитель спросил, что во время поиска можно нажать на «пробел»"чтобы разрешить поиск других слов.

Моя проблема: если слово является начальным, оно ищет без ошибок, проблема в том, что при нажатии пробела и добавлении новой буквы для поиска в моем словаре оно не изменяетсяпозиция.

Мой код: https://codeshare.io/5QzkjQ

Я предполагаю, что моя ошибка в: else if ($i != intval(strlen($word)) - 1)

Пример: я получаю ввод $ _POST слов:ball, car.

Теперь в моем другом вводе я сначала ищу слово car, основываясь на позиции, машина имеет 3 буквы, я даю пробел, и она остается на той же строке, теперь, если я пытаюсь написатьшарик "b", он останется на последней букве в случае "r".

Я не знаю, объяснил ли я себя очень ясно, но код объясняет более простым способом.Спасибо!

Код:

<?php
$word = $_POST["word"];
$words = $_POST["words"];
$verifyProccess = $_POST["verifyProccess"];

$alfabet="abcdefghijklmnopqrstuvwxyz";
$linePosition = 1;
$maxLengMatrizTable = array(array(500), array(500));
$vecTable = array(500);
$initSizeMatrizTable = 0;

$symbols = explode(" ", $words);

for ($i = 0; $i < sizeof($symbols); $i++) {
    $trim = rtrim($symbols[$i], " ");
    $initSizeMatrizTable = $initSizeMatrizTable + strlen($trim);
}

$initSizeMatrizTable = $initSizeMatrizTable + 3;

for ($i = 1; $i < $initSizeMatrizTable; $i++) {
    for ($j = 0; $j < 27; $j++) {
        $maxLengMatrizTable[$i][$j] = "-";
    }
}

$lastLine = 1;
$totalLine = 1;
$nextLine = 1;
$cont = 0;

/* Adiciona a word na tabela passando as posicoes corretamente(monta a matriz já com as posições corretas) */
for ($i = 0; $i < sizeof($symbols); $i++) {
    $nextLine = 1;
    $trim = rtrim($symbols[$i], " ");

    for ($j = 0; $j < intval(strlen($trim)); $j++) {
        $alfabetPos = strripos($alfabet, $trim[$j]) + 1;

        if ($maxLengMatrizTable[$nextLine][$alfabetPos] == "-") {
            $lastLine = $lastLine + 1;
            $maxLengMatrizTable[$nextLine][$alfabetPos] = $lastLine;
            $totalLine = $totalLine + 1;
        }
        /* ultima posicao da palavra*/              
        $nextLine = $maxLengMatrizTable[$nextLine][$alfabetPos];

        if (intval(strlen($trim) - 1) == $j) {
            $vecTable[$cont] = $lastLine;
            $cont = $cont + 1;
        }
    }
}

$sizeMatriz = $totalLine + 1;
$errorPosition = $sizeMatriz - 1;

/* SEARCH! pegar da outra page */
/* faz a quebra da palavra */
for ($i = 0; $i < intval(strlen($word)); $i++) {
    $alfabetPos = strpos($alfabet, $word[$i]) + 1;

    if ($word[$i] != " ") {
        if ($alfabetPos != " " && $verifyProccess == true) {
            if ($maxLengMatrizTable[$linePosition][$alfabetPos] != "-" && $verifyProccess) {
                $verifyProccess = true;

                /* Define a proxima linha que ira pintar */
                $linePosition = $maxLengMatrizTable[$linePosition][$alfabetPos];

                $answer = array(
                    "linePosition"  =>  $linePosition,
                    "wordProccess"  =>  $verifyProccess
                );

            } else {
                $verifyProccess = false;

                $answer = array(
                    "linePosition" => $errorPosition,
                    "wordProccess" => $verifyProccess
                );
            }
        } else {
            $verifyProccess = false;

            $answer = array(
                "linePosition" => $errorPosition,
                "wordProccess" => $verifyProccess
            );
        }
    } else if ($i != intval(strlen($word)) - 1) {
        $final = false;

        for($j = 0; $j < sizeof($vecTable); $j++) {
            if($vecTable[$j] == $linePosition) {
                $final = true;
            }
        }
    } else {
        //
    }
}

$jsonanswer = json_encode($answer);
echo $jsonanswer;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...