C#检查给定单词以回答单词
我正在为C#做一个简单的拼写检查,我想尝试将给定的答案与随机选择的单词进行比较 我想将第一个字母与答案中给出的所有字母进行比较,这样我就可以判断它是否正确,是否有字母交换、删除或添加。我最终希望能够判断是否只有一个字母是错误的,以看到替代使用 例如,正确回答hello: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
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];
}