2010-11-04 138 views
0

很顯然,我對此很陌生,因此也是該項目的內容。我寫了一些代碼將英語翻譯成Pig Latin。很簡單。問題是我想找到一種方法來將豬拉丁文翻譯成英文使用邏輯塊。克隆字符串似乎是一種便宜的方法。有什麼建議麼?這是我的代碼:從拉丁文翻譯成英文的C#翻譯器

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()); 
      } 

     } 
    } 
} 

問題是沒有真正的規則可行。例如:如果上一個第三個字母 是「w」,那麼您可能想要說這是一個元音字,但是,以「w」開頭的輔音字也可以符合此規則。如果第一個字母再次是元音字母,你可能會想說這是一個元音字,但是,從第一個字母移到後面(pat = atpay),輔音字也可以適合這個規則。我認爲這是可能的唯一方法是有一個if語句來檢查w是否在第三個位置,並且該單詞以元音開頭,該元音將要求運算符,如果您將它與字符串一起使用,則Visual Studio會對您大喊。

回答

4

的問題是,豬拉丁/英文翻譯是不是雙射函數。

例如,假設有2個英文單詞,如"all""wall",相應的Pig拉丁詞將始終爲"allway"

這表明,如果你得到一個像"allway"這樣的詞,你不能給出一個英文的唯一翻譯,但(至少)兩個。

+0

究竟是什麼即時通訊思維。所以,在這種特殊情況下,我不是真的錯過了一些東西我遇到了不可能的事情? – 2010-11-04 15:44:56

+0

是的,我認爲有一個獨特的翻譯(大部分時間)是不可能的。但是,如果存在多種可能性,也許你可以提供不同的翻譯... – digEmAll 2010-11-04 15:56:50

+0

哇,需要大量頭腦風暴才能找到所有多個案例......或者我可以創建一個函數來處理這個問題。好。我想我現在走在正確的道路上。感謝digEmAll和所有幫助我的人! – 2010-11-04 16:03:42

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); 
    } 
} 
+1

沒有沒有作業只是試圖回到編碼,這似乎是一個有據可查的項目。感謝幫助!是的,建立一個新班級來預製邏輯將會很好。問題是邏輯。我慢慢地想到它不可能。你怎麼看? – 2010-11-04 15:34:28

+0

對於翻譯器應用程序,返回原始字符串的副本好像在作弊... – 2010-11-07 12:23:55