Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查两个字符串是否包含相同但顺序不同的单词_C#_String - Fatal编程技术网

C# 检查两个字符串是否包含相同但顺序不同的单词

C# 检查两个字符串是否包含相同但顺序不同的单词,c#,string,C#,String,我需要一种方法来检查两个字符串,看看它们是否有相同的单词,但位置不同。我只需要字里行间的字数,而不是实际的字数。例如:字符串1是“这是一个顺序错误的测试”,字符串2是“这是一个顺序错误的测试”,当一个单词出现顺序错误时,将返回1 我从以下代码开始: public int OutOfOrder(string string1, string string2) { var search1 = string1.Split(' '); var search2 = string2.Split

我需要一种方法来检查两个字符串,看看它们是否有相同的单词,但位置不同。我只需要字里行间的字数,而不是实际的字数。例如:字符串1是“这是一个顺序错误的测试”,字符串2是“这是一个顺序错误的测试”,当一个单词出现顺序错误时,将返回1

我从以下代码开始:

public int OutOfOrder(string string1, string string2)
{
    var search1 = string1.Split(' ');
    var search2 = string2.Split(' ');
    var OutOfOrder = 0;

    for (int i = 0; i < search1.Count() - 1; i++)
    {
        if (search2.Contains(search1[i]))
        {
            for (int j=0; j < search2.Count()-1; j++)
            {
                if(search1[i] == search2[j] && i == j)
                {
                    continue;
                }
                else if (search1[i] == search2[j] && i != j)
                {
                    OutOfOrder++;
                    break;
                }
            }
        }
    }

    return OutOfOrder;
}
public int无序(字符串string1、字符串string2)
{
var search1=string1.Split(“”);
var search2=string2.Split(“”);
var-OutOfOrder=0;
for(int i=0;i
但是,在遇到第一个问题后,一切都不正常,返回的数字也不正确。

就是这样

public static int OutOfOrder(string a, string b){

            //not out of order issuex`
        if (a.Length != b.Length) return -1;

        foreach(string str in a.Split(' ')){
            //not out of order issue
            if (!b.Contains(str)) return -1;
        }

        //if out of order issue...

        int count=0;

        string[] awords = a.Split(' ');
        string[] bwords = b.Split(' ');

        for(int i=0; i<bwords.Length; i++){
            if (!awords[i].Equals(bwords[i])) count++;
        }

        return (int)Math.Ceiling(0.0f + count/2);
        //if one is out of order, then it's expected it renders another out of order too.
        //so we need to divide it by 2 to get the one disturbing.
        //and ceiling is used to help for odd number of words
    }

它输出1

请您解释一下,为什么您希望1而不是3?移动一个单词会改变其他单词的位置,在输入中顺序混乱,因为在嵌套循环中计数,每个混乱的单词都会计数
n
次,其中
n
是单词数,因此计数会变得太高。相反,您可以使用一个标志数组,在其中标记检测到的每个无序单词,然后在比较完成时统计这些标志。
public static void Main(string[] args)
{
    string a = "This solves the problem";
    string b = "This solves problem the";

    Console.WriteLine(OutOfOrder(a, b));
}