Я строю проект колледжа, лексический анализатор.
Я смог собрать всю структуру, но мой учитель спросил, что во время поиска можно нажать на «пробел»"чтобы разрешить поиск других слов.
Моя проблема: если слово является начальным, оно ищет без ошибок, проблема в том, что при нажатии пробела и добавлении новой буквы для поиска в моем словаре оно не изменяетсяпозиция.
Мой код: 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;