0

infix evaluator+、-、*、/、(、)、非負の整数、および 1 つ以上の文字で始まり 1 つ以上の数字で終わる任意の文字列を含む正当なトークンを作成しています。

特定の文字列が 1 つ以上の文字で始まり、1 つ以上の数字で終わるかどうかを判断する最も効率的な方法を見つけようとしています。問題は、alphabetical characaters must come before the numerical values(X1、XX1、X11 など) です。ただし、文字列に 1X、X1X、X#1 のようなものが含まれている場合、入力は無効です。これには多くの可能性があることを知っており、単純化する方法があることを願っています。

Anyこれまで、文字列の、StartsWithEndsWith関数などのメソッドを研究してきました。これを短いラムダ式またはワンライナーに単純化する可能性が多すぎるように感じます。実際、どのような種類の入力も保証されているとは限らないため、これらの条件が満たされていることを確認するには、N 文字すべてをチェックする必要があるようです。

以下は、私がこれまでに持っているコードです。このコードには、正規表現に基づいて入力文字列を分割することが含まれます@"([()+*/-])"

    public static string[] parseString(String infixExp)
    {
        /* In a legal expression, the only possible tokens are (, ), 
         * +, -, *, /, non-negative integers, and strings that begin 
         * with one or more letters and end with one or more digits.
         */

        // Ignore all whitespace within the expression.
        infixExp = Regex.Replace(infixExp, @"\s+", String.Empty);

        // Seperate the expression based on the tokens (, ), +, -, 
        // *, /, and ignore any of the empty Strings that are added
        // due to duplicates.
        string[] substrings = Regex.Split(infixExp, @"([()+*/-])").Where(s => s != String.Empty).ToArray();

        // Return the resulting substrings array such that it
        // can be processed by the Evaluate function.
        return substrings;
    }

この問題を解決できる提案的なアプローチや参照があれば、お気軽に!

4

2 に答える 2

0

あなたが試すことができます

char[] letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".ToCharArray();
char[] numbers = "1234567890".ToCharArray();
foreach(string s in infixExp.Split(' '))
{
  if(letters.Contains(s[0]))
  {
    //do stuff
  }
  if(numbers.Contains(s[s.Length-1]))
  {
   //do more stuff
  }
}
于 2013-09-08T01:59:29.203 に答える