c#检查给定的单词来回答单词

本文关键字:单词 检查 | 更新日期: 2023-09-27 18:05:05

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

我想把第一个字母和答案中给出的所有字母进行比较,这样我就能知道它是正确的,是交换了字母,删除了字母还是增加了字母。我最终希望能够判断出是否只有一个字母错了,从而看到是否使用了替换。

例如,正确答案hello:

    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#。

I've try

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

显然,我知道这样会不断增加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];
        }

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

c#检查给定的单词来回答单词

你的函数有几个问题:

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

你需要更好地定义你的函数到底应该做什么。如果答案是"Hello",猜测是"Hello",你返回的是什么?有多少个字母不匹配(1)?表示错误的代码(插入)?错误在哪里?

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

你考虑过尝试string.Compare(…)吗?

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