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];
}
但是我需要一种方法来计算每个错误使用的次数?
你的函数有几个问题:
- 您试图使用单个返回值来处理该值的含义不一致的多个场景。一个函数不能同时返回一个状态(匹配,一个或两个值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