Pig拉丁翻译程序-JavaScript

Pig拉丁翻译程序-JavaScript,javascript,Javascript,因此,对于我的cit类,我必须编写一个pig拉丁语转换程序,我对如何将数组和字符串一起使用感到困惑。 转换规则很简单,只需将单词的第一个字母移到后面,然后添加ay。英语中的地狱就是拉丁语中的埃尔希 到目前为止,我有: <form name="form"> <p>English word/sentence:</p> <input type="text" id="english" required="required" size="80" /> <

因此,对于我的cit类,我必须编写一个pig拉丁语转换程序,我对如何将数组和字符串一起使用感到困惑。 转换规则很简单,只需将单词的第一个字母移到后面,然后添加ay。英语中的地狱就是拉丁语中的埃尔希 到目前为止,我有:

<form name="form">
<p>English word/sentence:</p> <input type="text" id="english" required="required" size="80" /> <br />
<input type="button" value="Translate!" onClick="translation()" />
<p>Pig Latin translation:</p> <textarea name="piglat" rows="10" cols="60"></textarea>
</form>

<script type="text/javascript">
<!--
fucntion translation() { 
var delimiter = " ";
    input = document.form.english.value;
    tokens = input.split(delimiter);
    output = [];
    len = tokens.length;
    i;

for (i = 1; i<len; i++){
    output.push(input[i]);
}
output.push(tokens[0]);
output = output.join(delimiter);
}
//-->
</script>

英语单词/句子:


猪的拉丁翻译:


我真的很感激能得到的任何帮助

你的朋友是字符串函数
.split
,数组函数
.join
.slice
.concat

警告:以下是一个完整的解决方案,您可以在完成或花费太多时间后参考

演示:


如果您正在使用阵列,这可能有点复杂,但它简洁紧凑:

var toPigLatin = function(str) {
    return str.replace(/(^\w)(.+)/, '$2$1ay');
};
演示:

略为改进的版本,可用于整句话:

var toPigLatin = function(str){
    return str.replace(/\b(\w)(\w+)\b/g, '$2$1ay');
};

我认为您真正需要了解的两件事是
substring()
方法和字符串合并(将两个字符串添加在一起)。由于对
split()
的调用返回的数组中的所有对象都是字符串,因此简单的字符串合并就可以了。例如,使用这两种方法,可以将字符串的第一个字母移动到末尾,如下所示:

var myString = "apple";

var newString = mystring.substring(1) + mystring.substring(0,1);
这是我的解决办法

function translatePigLatin(str) {
  var newStr = str;
  // if string starts with vowel make 'way' adjustment
  if (newStr.slice(0,1).match(/[aeiouAEIOU]/)) {
    newStr = newStr + "way";
  }
  // else, iterate through first consonents to find end of cluster
  // move consonant cluster to end, and add 'ay' adjustment
  else {
    var moveLetters = "";
    while (newStr.slice(0,1).match(/[^aeiouAEIOU]/)) {
      moveLetters += newStr.slice(0,1);
      newStr = newStr.slice(1, newStr.length);
    }
    newStr = newStr + moveLetters + "ay";
  }
  return newStr;
}

这段代码是基本的,但它可以工作。首先,注意以元音开头的单词。否则,对于以一个或多个辅音开头的单词,确定辅音的数量并将其移动到末尾

function translate(str) {
    str=str.toLowerCase();

    // for words that start with a vowel:
    if (["a", "e", "i", "o", "u"].indexOf(str[0]) > -1) {
        return str=str+"way";
    }

    // for words that start with one or more consonants
   else {
   //check for multiple consonants
       for (var i = 0; i<str.length; i++){
           if (["a", "e", "i", "o", "u"].indexOf(str[i]) > -1){
               var firstcons = str.slice(0, i);
               var middle = str.slice(i, str.length);
               str = middle+firstcons+"ay";
               break;}
            }
    return str;}
}

translate("school");
函数转换(str){
str=str.toLowerCase();
//对于以元音开头的单词:
如果([“a”、“e”、“i”、“o”、“u”])。索引of(str[0])>-1){
返回str=str+way;
}
//以一个或多个辅音开头的单词
否则{
//检查多个辅音
对于(变量i=0;i-1){
var firstcons=str.slice(0,i);
var middle=str.slice(i,str.length);
str=中间+第一个CONS+ay;
中断;}
}
返回str;}
}
翻译(“学校”);

另一种方法,使用单独的函数作为真或假开关

function translatePigLatin(str) {

  // returns true only if the first letter in str is a vowel
  function isVowelFirstLetter() {
    var vowels = ['a', 'e', 'i', 'o', 'u', 'y'];
    for (i = 0; i < vowels.length; i++) {
      if (vowels[i] === str[0]) {
        return true;
      }
    }
    return false;
  }

  // if str begins with vowel case
  if (isVowelFirstLetter()) {
    str += 'way';
  }
  else {
    // consonants to move to the end of string
    var consonants = '';

    while (isVowelFirstLetter() === false) {
      consonants += str.slice(0,1);
      // remove consonant from str beginning
      str = str.slice(1);
    }

    str += consonants + 'ay';
  }

  return str;
}

translatePigLatin("jstest");
函数翻译拉丁语(str){
//仅当str中的第一个字母是元音时返回true
函数Is元音firstletter(){
变量元音=['a','e','i','o','u','y'];
for(i=0;i<元音。长度;i++){
if(元音[i]==str[0]){
返回true;
}
}
返回false;
}
//如果str以元音大小写开头
if(IsVouelFirstletter()){
str+=‘方式’;
}
否则{
//移动到字符串末尾的辅音
var辅音=“”;
while(is元音firstletter()==false){
辅音+=str.slice(0,1);
//从str开头去掉辅音
str=str.slice(1);
}
str+=辅音+ay';
}
返回str;
}
翻译拉丁语(“jstest”);

这是我的解决方案代码:

function translatePigLatin(str) {
var vowel;
var consonant;
var n =str.charAt(0);
vowel=n.match(/[aeiou]/g);
if(vowel===null)
{
consonant= str.slice(1)+str.charAt(0)+”ay”;
}
else
{
consonant= str.slice(0)+”way”;
}
var regex = /[aeiou]/gi;
var vowelIndice = str.indexOf(str.match(regex)[0]);
if (vowelIndice>=2)
{
consonant = str.substr(vowelIndice) + str.substr(0, vowelIndice) + ‘ay’;
}

return consonant;
}

translatePigLatin(“gloove”);
还有另一种方式

String.prototype.toPigLatin = function()
{
    var str = "";
    this.toString().split(' ').forEach(function(word)
    {
        str += (toPigLatin(word) + ' ').toString();
    });
    return str.slice(0, -1);
};

function toPigLatin(word)
{
    //Does the word already start with a vowel?
    if(word.charAt(0).match(/a*e*i*o*u*A*E*I*O*U*/g)[0])
    {
        return word;
    }

    //Match Anything before the firt vowel.
    var front = word.match(/^(?:[^a?e?i?o?u?A?E?I?O?U?])+/g);
    return (word.replace(front, "") + front + (word.match(/[a-z]+/g) ? 'a' : '')).toString();
}

另一种使用拉丁语的方式:

函数翻译拉丁语(str){
让元音=/[aeiou]/g;
var n=str.search(元音);//将查找元音的索引
开关(n){
案例0:
str=str+“方式”;
打破
案例1:
str=str+ay;
打破
违约:
str=str.slice(n)+str.slice(0,n)+“ay”;
打破
}
返回str;
}

console.log(翻译为拉丁语(“节奏”)解决问题的第一步是学会提出正确的问题。到底是什么让你困惑?您可能会发现您找到了回答自己问题的工具。没有回答您的问题,但请注意,您正在为
输入
标记
输出
len
,以及
翻译
函数中的
i
创建全局变量(单词
功能
[sic]也拼写错误,但至少在控制台中会出现错误)。您已经使用
var
声明了
分隔符
,但是
在它的末尾结束了
var
语句,因此下面的几条语句只是分配(除了
i;
)的对象。只是FWIW。@32bitkid我对如何在数组中移动字母感到困惑。。我知道如何将第一个字母与单词分开,但不知道如何将它移到所有变量的末尾。。我们不想要全球范围hoarding@Gcap:不需要在数组中移动字母。一旦你从
split
中正确地得到了单词的字符串数组(除了我上面的注释中的内容),请看一下如何使用。使用
split
来拆分所有字符是过分的。只需使用
子字符串(0,1)
子字符串(1)
。是的,通常最好不要用完整的答案回答家庭作业问题(即使你在顶部提出警告也不行)。从技术上讲,是和应该是。感谢谷歌为这些页面编制索引,以便专业人员可以搜索使用过的代码。呵呵。@T.J.Crowder:你是对的,但是我养成了这样做的习惯,因为它支持我经常使用的函数,比如
.slice
(后面的负索引,这里不需要),
.filter
(查找/删除具有特征的字母),
.forEach
(而不是for循环),
。每个
(每个字母都是大写的?),
。有些
(一组坏字符中是否有某个字符?,
.map
(caesar shift),
@ninjagecko:我真的很喜欢电钻。我什么都用电钻:在墙上钻孔、钉钉子、洗衣服等等;-)你在哪个浏览器上测试?我在Firefox很好用谢谢你!这帮了大忙!我还想知道如何将输出保存在textarea框中。。假设我输入“are”,然后在文本区域将其转换为“reay”和t
function translatePigLatin(str) {

  // returns true only if the first letter in str is a vowel
  function isVowelFirstLetter() {
    var vowels = ['a', 'e', 'i', 'o', 'u', 'y'];
    for (i = 0; i < vowels.length; i++) {
      if (vowels[i] === str[0]) {
        return true;
      }
    }
    return false;
  }

  // if str begins with vowel case
  if (isVowelFirstLetter()) {
    str += 'way';
  }
  else {
    // consonants to move to the end of string
    var consonants = '';

    while (isVowelFirstLetter() === false) {
      consonants += str.slice(0,1);
      // remove consonant from str beginning
      str = str.slice(1);
    }

    str += consonants + 'ay';
  }

  return str;
}

translatePigLatin("jstest");
function translatePigLatin(str) {
var vowel;
var consonant;
var n =str.charAt(0);
vowel=n.match(/[aeiou]/g);
if(vowel===null)
{
consonant= str.slice(1)+str.charAt(0)+”ay”;
}
else
{
consonant= str.slice(0)+”way”;
}
var regex = /[aeiou]/gi;
var vowelIndice = str.indexOf(str.match(regex)[0]);
if (vowelIndice>=2)
{
consonant = str.substr(vowelIndice) + str.substr(0, vowelIndice) + ‘ay’;
}

return consonant;
}

translatePigLatin(“gloove”);
String.prototype.toPigLatin = function()
{
    var str = "";
    this.toString().split(' ').forEach(function(word)
    {
        str += (toPigLatin(word) + ' ').toString();
    });
    return str.slice(0, -1);
};

function toPigLatin(word)
{
    //Does the word already start with a vowel?
    if(word.charAt(0).match(/a*e*i*o*u*A*E*I*O*U*/g)[0])
    {
        return word;
    }

    //Match Anything before the firt vowel.
    var front = word.match(/^(?:[^a?e?i?o?u?A?E?I?O?U?])+/g);
    return (word.replace(front, "") + front + (word.match(/[a-z]+/g) ? 'a' : '')).toString();
}