алгоритм — расщепление нескольких соединенных слов в коде PHP — не работает

В этом URL Как я могу разделить несколько слов?, Я нашел исходный код, который прекрасно работает на Perl, но мое требование в PHP.

Я никогда не работал над Perl, ни разу, но мне удалось перевести код Perl в PHP.

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

#!/usr/bin/perl

use strict;

my $WORD_FILE = '/usr/share/dict/words'; #Change as needed
my %words; # Hash of words in dictionary

# Open dictionary, load words into hash
open(WORDS, $WORD_FILE) or die "Failed to open dictionary: $!\n";
while (<WORDS>) {
chomp;
$words{lc($_)} = 1;
}
close(WORDS);

# Read one line at a time from stdin, break into words
while (<>) {
chomp;
my @words;
find_words(lc($_));
}

sub find_words {
# Print every way $string can be parsed into whole words
my $string = shift;
my @words = @_;
my $length = length $string;

foreach my $i ( 1 .. $length ) {
my $word = substr $string, 0, $i;
my $remainder = substr $string, $i, $length - $i;
# Some dictionaries contain each letter as a word
next if ($i == 1 && ($word ne "a" && $word ne "i"));

if (defined($words{$word})) {
push @words, $word;
if ($remainder eq "") {
print join(' ', @words), "\n";
return;
} else {
find_words($remainder, @words);
}
pop @words;
}
}

return;
}

PHP код написан мной, но не работает.

<?php

$WORD_FILE = file_get_contents ("word.txt") ;

$words = Array () ;

foreach ($WORD_FILE as $str)
{
$words [$str] = 1 ;
}

while(true)
{
$input = trim(fgets(STDIN, 1024));
find_words ($input) ;
}

function find_words ($str)
{
$string = $str ;
$length = strlen ($str) ;

for ($i = 1 ; $i <= $length; $i++)
{
$word = substr ($string, 0, $i) ;
$remainder = substr ($string, $i, $length - $i) ;

$i++ ;

if ($i == 1 && ($word != "a" && $word != "i")) ;

if ($words($word))
{
array_push($words, $word) ;
if ($remainder == "")
{
print_r ($words) ;
return ;
}
else
{
find_words ($remainder, @words) ;
}
array_pop ($words) ;
}
}

return ;
}

?>

-2

Решение

Ваш foreach ($WORD_FILE as $str) должен иметь массив вместо $WORD_FILE так что должно быть что-то вроде:

$WORD_FILE = file_get_contents("word.txt");
$words = explode(" ", $WORD_FILE);
foreach ($words as $str) {
*commands go here*
}

file_get_contents возвращает только строку. Ты можешь использовать взрываться разбить эту строку в массив на основе другой строки. В этом случае я использовал " " представлять пространство.

0

Другие решения

Рабочая копия этого, не уверен, есть ли какая-то ошибка в этом.
Если кто-то может найти какую-то ошибку, пожалуйста, дайте мне знать.

<?php

$WORD_FILE = file_get_contents ("word.txt") ;

$temp_arr = explode("\n", $WORD_FILE);

foreach ($temp_arr as $str)
{
$words [$str] = 1 ;
}

$processed = Array () ;

find_words ($argv[1]) ;
print_r ($processed) ;

function find_words ($str)
{
global $words ;
global $processed ;

$string = $str ;
$length = strlen ($str) ;

for ($i = 1 ; $i <= $length + 1; $i++)
{
$word = substr ($string, 0, $i) ;
$remainder = substr ($string, $i, $length - $i) ;

if ($i == 1 && ($word != "a" && $word != "i")) ;

if (array_key_exists ($word, $words))
{
array_push($processed, $word) ;
if ($remainder == "")
{
return ;
}
else
{
find_words ($remainder, $words) ;
}
echo "popping the word " . array_pop ($words) . "\n";
}
}

return ;
}

?>
0

По вопросам рекламы [email protected]