0

明らかに私はこれが初めてなので、このプロジェクトの内容です。英語を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)。これが可能であると私が考える唯一の方法は、w が 3 番目の位置にあるかどうかをチェックする if ステートメントを使用することであり、単語が && 演算子を呼び出す母音で始まり、文字列で使用すると Visual Studio が怒鳴ります。

4

2 に答える 2

4

問題は、Pig のラテン語/英語の翻訳が全単射関数ではないことです。

たとえば、 と のような 2 つの英語の単語がある"all"と想像してください。"wall"対応するピッグ ラテン語の単語は always になります"allway"

"allway"これは、次のような単語を取得した場合、英語で一意の翻訳を与えることはできませんが、(少なくとも) 2 つということを示唆しています。

于 2010-11-04T15:40:59.597 に答える
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);
    }
}
于 2010-11-04T15:30:17.527 に答える