我試圖解決使用PHP轉換爲拉丁文的問題。我被卡住了,因爲根據上下文的不同,Y既可以是元音也可以是輔音。如果Y在單詞的開頭,則被認爲是輔音,如果它在中間被認爲是元音。PHP豬拉丁語,Y既作爲元音和輔音
例如「黃色風格」變成「ellowyay ylestay」。規則是:「以元音開始的單詞(A,E,I,O,U)只在單詞的末尾添加」WAY「。 以輔音開頭的單詞具有所有輔音字母第一個元音移到了單詞的末尾(而不是第一個輔音字母),並且附加了「AY」(在這種情況下,'Y'被計算爲元音)「
我的代碼如下:
class Config{
public static $vowels = 'aeiou';
public static $vowelTermination = "way";
public static $consonants = 'b-df-hj-np-tv-z';
}
class Piglatin
{
public function convert($input)
{
$return = "";
$wordArray = explode(" ", $input);
foreach($wordArray as $word){
$return .= $this->translate($word);
$return .= " ";
}
return rtrim($return);
}
public function translate($input)
{
$translation = "";
if(!empty($input)){
if(is_numeric($input)){
return $input;
}
if($this->startVowel($input)){
$input = $input . Config::$vowelTermination;
return $input;
}
if($this->startConsonant($input) && strlen($input)===1){
return $input.'ay';
}
if($this->startConsonant($input)){
$input = preg_replace('/^([b-df-hj-np-tv-xz]*)([aeiouy].*)$/', "$2$1ay", $input);
return $input;
}
}
return $translation;
}
public function startVowel($input)
{
$regex = '/^['.Config::$vowels.']/i';
if(preg_match($regex, $input)){
return true;
}
return false;
}
public function startConsonant($input)
{
$regex = '/^['.Config::$consonants.']/i';
if(preg_match($regex, $input)){
return true;
}
return false;
}
}
其中給定輸入「黃色風格」會產生接近預期結果但不完全的「黃色ylestay」。
關於如何解決這個問題的任何想法?
見https://github.com/davidyell/Pig -Latin-Translator/blob/master/lib/translate.php –
上面你說:'例如「黃色風格」變成「ellowyay ylestay」。規則是:'。在底部,你說:'哪個給定的輸入「黃色風格」產生「ellowyay ylestay」這是接近預期的結果,但不完全' – sln
不重複,但存在於github:D @WiktorStribiżew – MohaMad