我正在为 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];
}
但是我需要一种方法来计算每个错误的使用次数?