比较c#中的两个字符串

时间:2013-03-18 18:53:31

标签: c# .net string

我有一个程序需要将任何给定的字符串与预定义的字符串进行比较,并确定是否发生了插入错误,删除错误,转置或替换错误。

例如,如果向用户显示 dog 一词并且用户提交 doge ,则应通知用户插入错误已经完成。

我该怎么做?

3 个答案:

答案 0 :(得分: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
}

一旦你构建了所有单独的规则,并且首先检查正常的相等,一次一个地解雇它们。

你必须将这样的问题分解成小组件,然后一旦遇到一堆简单的问题,一次解决一个问题。

答案 1 :(得分:0)

脱离我的头脑,但我认为这应该让你开始:

InsertionDeletion应该非常简单;只需检查字符串的长度。

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,您可以使用Hamming Distance并检查它是否大于0.

答案 2 :(得分:-1)

我建议您创建一个functionparameter作为input stingfunction看起来或多或少会像这样。然后在任意位置使用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
    }
}