C#检查给出的单词来回答单词

时间:2013-03-21 19:24:07

标签: c# spell-checking

我正在为C#编写一个简单的拼写检查程序,我想尝试将给定答案与随机选择的单词进行比较。

我想将第一个字母与答案中给出的所有字母进行比较,以便我可以判断它是否正确,它是否有字母交换,删除或添加的字母。我最终希望能够判断是否只有一个字母是错误的,因为看到使用了替换。

例如,正确答案你好:

    checking first letter ~H 
    h e l l o
    1 0 0 0 0

    h h e l l o
    1 1 0 0 0 0

    e l l o 
    0 0 0 0

然后通过它获取第二个字母。

我完全不知道C#。

我试过

int CheckErrors(string Answer, string Guess)
        {
            if (Answer == Guess)
            {
                return 1;
            }

            if (Answer == null || Guess == null)
            {
                return -1;
            }

            for (int i = 0; i <= Answer.Length; i++)
            {

                if (Guess[i] != Answer[i])
                {
                    count++;

                    //substitution = -4
                    //deletion = -5
                    //transposition = -6
                    //insertion = -7
                }
                return count;
            }
            return -9;
        }

但我无法继续下去。

更新:

进一步研究我猜我试图做的是:

STRING answer = answer_given
STRING input = correct_answer

int check = 0;

FOR (int i = 0; i < input.Length; i++)
{
   FOR (int ii = 0; ii < answer.Length; ii++)
   {
     if (input[i] == answer[i])
     {
        int check++;
     }
   }
}

显然我知道这会继续增加检查,但我不知道该怎么做。

另一个更新!

我可以用这个 -

int CheckErrors(string Answer, string Guess)
        {
            int[,] d = new int[Answer.Length + 1, Guess.Length + 1];
            for (int i = 0; i <= Answer.Length; i++)
                d[i, 0] = i;
            for (int j = 0; j <= Guess.Length; j++)
                d[0, j] = j;
            for (int j = 1; j <= Guess.Length; j++)
                for (int i = 1; i <= Answer.Length; i++)
                    if (Answer[i - 1] == Guess[j - 1])
                        d[i, j] = d[i - 1, j - 1];  //no operation
                    else
                        d[i, j] = Math.Min(Math.Min(
                            d[i - 1, j] + 1,    //a deletion

                            d[i, j - 1] + 1),   //an insertion

                            d[i - 1, j - 1] + 1 //a substitution

                            );
            return d[Answer.Length, Guess.Length];
        }

但我需要一种方法来计算每个错误的使用次数吗?

3 个答案:

答案 0 :(得分:1)

您的功能有几个问题:

  • 您尝试使用单个返回值来处理该值的含义不一致的多个场景。一个函数不能同时返回一个状态(匹配,一个或两个值为null,不匹配等)和一个计数器。
  • 如果您要使用数字来表示返回状态,请使用enum使其更具可读性。
  • 您的for循环总是在一次迭代后终止,因为它每次都会返回return语句。您的return语句需要在for循环后移动。
  • 如果i大于if (Guess[i] != Answer[i])的长度,
  • Guess将抛出异常。
  • 目前尚不清楚 count 应该代表什么,而且它没有在函数中定义。

您需要更好地定义您的函数究竟应该做什么。如果答案是“你好”并且猜测是“Hhello”,你还会回答什么?字母数不匹配(1)?代表错误的代码(插入)?错误位于何处?如果您需要多个这样的东西,那么您需要一个单独的功能。

答案 1 :(得分:1)

您可以通过查看WikipediaStackOverflow中的近似字符串匹配来获得灵感。

答案 2 :(得分:0)

您是否考虑过尝试使用string.Compare(...)?

http://msdn.microsoft.com/en-us/library/zkcaxw5y.aspx