C#检查给定单词以回答单词

C#检查给定单词以回答单词,c#,spell-checking,C#,Spell Checking,我正在为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

我正在为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#,我完全不知道

我试过了

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;
        }
int检查错误(字符串回答、字符串猜测)
{
如果(答案==猜测)
{
返回1;
}
如果(答案==null | |猜测==null)
{
返回-1;
}

对于(inti=0;i您是否考虑过尝试string.Compare(…)


您的功能有几个问题:

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

你需要更好地定义你的函数应该做什么。如果答案是“Hello”,猜测是“Hhello”,你会返回什么?不匹配的字母数(1)?表示错误的代码(插入)?错误所在位置?如果您需要不止一个这样的东西,那么您需要一个单独的函数。

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

好吧,只要看一下您的代码,您就不会声明count,因此不会编译。即使使用count,您的函数也会始终返回0(答案[0]一旦到达for循环,猜测[0]相等)、1(答案[0]和猜测[0]不相等)或-9(答案[0]的长度为0)。请尝试对您的一些逻辑进行伪编码,以便您自己和我们帮助您(在您的问题中,而不是作为评论).See and以获取实现。@Austin我确实看过它,但我找不到一个我能理解的例子来使用它。但是有了Rosetta链接,我现在可以使用它了。谢谢。谢谢,这是非常有用的。我想我希望返回一个数字,然后是如果1,正确,如果2,交换字母之类的如果有信息的话,也许你可以考虑投票给他们。这个姿势总是很受欢迎。我已经检查过了,但是我不确定我怎样才能实现这一点。
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];
        }