我有一个程序需要将任何给定的字符串与预定义的字符串进行比较,并确定是否发生了插入错误、删除错误、转置或替换错误。
例如,如果单词dog被呈现给用户并且用户提交dogs或doge,它应该通知用户插入错误。
我该怎么做?
在我的脑海中,但我认为这应该让你开始:
Insertion
并且Deletion
应该很简单;只需检查字符串的长度。
if(originalString.Length > newString.Length)
{
//deletion
}
else if(originalString.Length < newString.Length)
{
//insertion
}
要检测transposition
,请检查长度是否匹配,如果匹配,您可以List<char>
从两个字符串中创建两个。然后使用下面的表达式检查它们是否匹配
bool isTransposed = originalList.OrderBy(x => x).SequenceEquals(newList.OrderBy(y => y));
要检测substitution
,您可以使用汉明距离并检查它是否大于 0。
您可能需要为每个单独的错误类型编写一个方法来查看它是否是错误,例如:
bool IsInsertionError(string expected, string actual) {
// Maybe look at all of the chars in expected, to see if all of them
// are there in actual, in the correct order, but there's an additional one
}
bool IsDeletionError(string expected, string actual) {
// Do the reverse of IsInsertionError - see if all the letters
// of actual are in expected, in the correct order,
// but there's an additional one
}
bool IsTransposition(string expected, string actual) {
// This one might be a little tricker - maybe loop through all the chars,
// and if expected[i] != actual[i], check to see if
// expected[i+1] = actual[i] and actual[i-1]=expected[i]
// or something like that
}
一旦你建立了所有单独的规则,并且你首先检查了规则的相等性,一次触发它们中的每一个。
你必须把这样的问题分解成小部分,然后一旦你有一堆简单的问题,一次解决一个。
我建议您创建一个function
将 aparameter
作为input sting
. function
看起来或多或少像这样。使用function
你想要的任何地方。
private void CheckString(string userString)
{
string predefinedString = "dog";
if (userString == predefinedString)
{
// write your logic here
}
else
{
MessageBox.Show("Incorrect word"); // notify the users about incorrect word over here
}
}