2010-11-04 6 views
0

Évidemment, je suis nouveau à ce sujet, d'où le contenu de ce projet. J'ai écrit un code qui traduira l'anglais en Pig Latin. Assez facile. Le problème est que je veux trouver un moyen de traduire le latin Pig en anglais en utilisant un bloc logique. La chaîne de clones semble juste comme un moyen bon marché de le faire. Aucune suggestion? Voici mon code:C# traducteur du latin Pig vers l'anglais

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

     } 
    } 
} 

Le problème est qu'il n'y a pas de véritable règle qui fonctionnerait. Par exemple: Si la troisième lettre du dernier était "w", vous pourriez vouloir dire que c'est un mot voyelle, mais un mot consonne commençant par un "w" pourrait également correspondre à cette règle. Si la première lettre était encore une voyelle, vous pourriez vouloir dire que c'est un mot de voyelle mais, un mot de consonne pourrait également adapter cette règle puisque la première lettre est déplacée vers l'arrière (pat = atpay). La seule façon que je pense que cela est possible est d'avoir une instruction if qui vérifie si w est en 3ème position et le mot commence par une voyelle qui appelle l'opérateur & & et Visual Studio vous crie dessus si vous l'utilisez avec des chaînes.

Répondre

4

Le problème est que la traduction Pig Latin/anglais n'est pas une fonction bijective. Par exemple, imaginez avoir 2 mots anglais comme "all" et "wall", les mots Pig Latin correspondants seront toujours "allway". Cela vous suggère que si vous obtenez un mot comme "allway" vous ne pouvez pas donner une traduction unique en anglais, mais (au moins) deux.

+0

exactement ce que je pense. Donc, dans ce cas particulier, je ne manque pas vraiment quelque chose. J'ai couru dans une impossibilité? –

+0

Oui, je pense que la traduction unique est (la plupart du temps) impossible. Mais peut-être que vous pourriez donner différentes traductions en cas de multiples possibilités ... – digEmAll

+0

wow quelle entreprise qui prendrait beaucoup de brainstorming pour trouver tous les cas multiples ... ou je pourrais créer une fonction qui s'occuperait de ça pour moi. D'ACCORD. Je pense que je suis sur le bon chemin maintenant. Merci digEmAll et tous les autres qui m'ont aidé! –

1

Je suppose que c'est devoirs.

Ce que votre professeur veut probablement, c'est que vous convertissiez une phrase en cochon latin et en cochon latin. Garder une copie de la chaîne d'origine ne vous permet de "revenir" à partir de phrases que vous connaissez déjà la version non-pig latin. Il ne vous permet pas de retourner de aucune chaîne.

Je pense que vous voulez structurer votre programme comme celui-ci:

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

ne pas faire ses devoirs juste essayer de revenir dans le codage et cela semblait être un projet bien documenté. Merci pour l'aide! Oui, construire une nouvelle classe pour préformer la logique fonctionnerait bien. Le problème est la logique. Je pense lentement que c'est impossible. Qu'est-ce que tu penses? –

+0

Pour une application de traducteur, renvoyer une copie de la chaîne d'origine semble comme tricher ... –