C#用の簡単なスペルチェッカーを作成しています。特定の回答をランダムに選択された単語と比較してみます。
最初の文字を回答に記載されているすべての文字と比較して、それが正しいかどうか、文字の交換、削除、または追加された文字があったかどうかを確認したいと思います。最終的には、置換が使用されたのを確認するために1文字だけが間違っていたかどうかを確認できるようにしたいと思います。
たとえば、正解は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
次に、2番目の文字を確認します。
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];
}
しかし、各エラーが使用された回数をカウントする方法が必要ですか?