显然我是新手,因此这个项目的内容。我写了一些代码,将英文翻译成Pig Latin。很容易。问题是我想找到一种方法,使用逻辑块将Pig Latin翻译成英语。克隆字符串似乎是一种廉价的方法。有什么建议?这是我的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace FunctionTest
{
public class PigLatinClass
{
public static void pigTalk(string sentence)
{
try
{
while (sentence != "exit")
{
string firstLetter;
string afterFirst;
string pigLatinOut = "";
int x;
string vowel = "AEIOUaeiou";
Console.WriteLine("Enter a sentence to convert into PigLatin");
sentence = Console.ReadLine();
string[] pieces = sentence.Split();
foreach (string piece in pieces)
{
afterFirst = piece.Substring(1);
firstLetter = piece.Substring(0, 1);
x = vowel.IndexOf(firstLetter);
if (x == -1)
{
pigLatinOut = (afterFirst + firstLetter + "ay ");
}
else
{
pigLatinOut = (firstLetter + afterFirst + "way ");
}
Console.Write(pigLatinOut);
}
Console.WriteLine("Press Enter to flip the sentence back.");
Console.ReadKey(true);
string clonedString = null;
clonedString = (String)sentence.Clone();
Console.WriteLine(clonedString);
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
}
}
问题在于没有真正有效的规则。例如:如果是第3个字母 从最后一个是“w”你可能想说这是一个元音词,但是一个以“w”开头的辅音词也适合这个规则。如果第一个字母又是元音,你可能想说这是一个元音词,但是,由于第一个字母被移到后面(pat = atpay),一个辅音词也适合这个规则。我认为这是可能的唯一方法是有一个if语句,检查w是否在第3个位置,并且单词以元音开头,这个元音要求&&如果你使用字符串,运算符和Visual Studio会对你大喊大叫。
答案 0 :(得分:4)
问题在于Pig拉丁语/英语翻译不是双射函数。
例如,假设有2个英语单词,如"all"
和"wall"
,相应的Pig拉丁语单词将始终为"allway"
。
这表明如果你得到像"allway"
这样的词,你就不能用英语给出一个独特的翻译,但是(至少)有两个。
答案 1 :(得分:1)
我假设这是作业。
你的教授可能想要的是你把一句话改为猪拉丁语和猪拉丁语。保留原始字符串的副本只允许您从已经知道非猪拉丁语版本的句子中“翻转”。它不允许您从任何字符串中翻转。
我认为你想要像这样构建你的程序:
public class PigLatinClass
{
public static string ToPigLatin(string sentence)
{
// Convert a string to pig latin
}
public static string FromPigLatin(string sentence)
{
// Convert a string from pig latin (opposite logic of above)
}
public static string PigTalk()
{
string sentence;
Console.WriteLine("Enter a sentence to convert into PigLatin");
sentence = Console.ReadLine();
sentence = ToPigLatin(sentence);
Console.WriteLine(sentence);
Console.WriteLine("Press Enter to flip the sentence back.");
Console.ReadKey(true);
sentence = FromPigLatin(sentence);
Console.WriteLine(sentence);
}
}