我正在为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];
}
但我需要一种方法来计算每个错误的使用次数吗?
答案 0 :(得分:1)
您的功能有几个问题:
enum
使其更具可读性。for
循环总是在一次迭代后终止,因为它每次都会返回return语句。您的return语句需要在for
循环后移动。if (Guess[i] != Answer[i])
的长度,Guess
将抛出异常。您需要更好地定义您的函数究竟应该做什么。如果答案是“你好”并且猜测是“Hhello”,你还会回答什么?字母数不匹配(1)?代表错误的代码(插入)?错误位于何处?如果您需要多个这样的东西,那么您需要一个单独的功能。
答案 1 :(得分:1)
您可以通过查看Wikipedia和StackOverflow中的近似字符串匹配来获得灵感。
答案 2 :(得分:0)
您是否考虑过尝试使用string.Compare(...)?