C# 在C中匹配2个字符串#

C# 在C中匹配2个字符串#,c#,string-matching,C#,String Matching,我有两条线。这两个字符串的大小可能不同。我想看看这两个字符串,寻找匹配的序列。一旦我找到一个变化,我想用大写字母打印这个单词,然后继续在字符串中打印,直到我找到另一个变化,依此类推。我不确定我会怎么做,我试着把单词作为一个整体来看待,但我有一些问题。基本上,我会有两个字符串,比如stringone=“这是一个新值”和stringtwo=“这也是一个新的品牌值””。我想从一开始就检查每个字符串,找到匹配的序列,例如“This is”在字符串处停止,意识到它在添加字符串时发生了变化,将其更改为大写,

我有两条线。这两个字符串的大小可能不同。我想看看这两个字符串,寻找匹配的序列。一旦我找到一个变化,我想用大写字母打印这个单词,然后继续在字符串中打印,直到我找到另一个变化,依此类推。我不确定我会怎么做,我试着把单词作为一个整体来看待,但我有一些问题。基本上,我会有两个字符串,比如
stringone=“这是一个新值”
stringtwo=“这也是一个新的品牌值”
”。我想从一开始就检查每个字符串,找到匹配的序列,例如“This is”在字符串处停止,意识到它在添加字符串时发生了变化,将其更改为大写,然后继续。预期输出=
“这也是一个新的品牌价值”

我正在尝试的一些代码。我认为这不是正确的方法

 static void Main(string[] args)
        {
            string one = "This is a new value";
            string two = "This This is a new also brand value";

            var coll = two.Split(' ').Select(p => one.Contains(p) ? p : p.ToUpperInvariant());

            Console.WriteLine(string.Join(" ", coll));
            Console.ReadKey();
        }

您可以将字符串转换为字符数组并逐个比较字符。我想您可以使用以下代码

string one = "this is string one";
        string two = "this is string one or two";


        char[] oneChar = one.ToCharArray();
        char[] twoChar = two.ToCharArray();
        int index = 0;
        List<char> Diff = new List<char>();

        if (oneChar.Length > twoChar.Length)
        {
            foreach (char item in twoChar)
            {
                if (item != oneChar[index])
                    Diff.Add(item);

                index++;
            }

            for (int i = index; i < oneChar.Length; i++)
            {
                Diff.Add(oneChar[i]);
            }
        }
        else if (oneChar.Length < twoChar.Length)
        {
            foreach (char item in oneChar)
            {
                if (item != twoChar[index])
                    Diff.Add(twoChar[index]);

                index++;
            }

            for (int i = index; i < twoChar.Length; i++)
            {
                Diff.Add(twoChar[i]);
            }
        }
        else//equal length
        {
            foreach (char item in twoChar)
            {
                if (item != oneChar[index])
                    Diff.Add(item);
            }
        }

        Console.WriteLine(Diff.ToArray());//" or two"
stringone=“这是stringone”;
stringtwo=“这是stringone或stringtwo”;
char[]oneChar=1.ToCharArray();
char[]twoChar=two.ToCharArray();
int指数=0;
List Diff=新列表();
if(oneChar.Length>twoChar.Length)
{
foreach(两个字符中的字符项)
{
if(item!=oneChar[索引])
差异添加(项目);
索引++;
}
for(int i=index;i
这就是你需要的吗?(更新)

var value1=“这是一个新值”;
var value2=“这也是一个新值”;
变量分隔符=新[]{”“};
var value1Split=value1.Split(分隔符、StringSplitOptions.None);
var value2Split=value2.Split(分隔符、StringSplitOptions.None);
var result=新列表();
var i=0;
var j=0;
而(i

请注意,如果对于
value1=“这是一个新值”
value2=“这也是一个新值”
输出应该是
“这也是一个新值”
,而对于
value1=“这是文本一个”
value2=“这是字符串文本二不是字符串一个”
输出将是
“这是字符串文本二不是字符串一”
,而不是
“这是字符串文本二而不是字符串一”
,正如您前面提到的。

这就是您要找的吗?描述并不精彩,但从答案来看,这似乎是在同一个球场,它使用LINQ的代码和复杂性更少

class Program
{
    static void Main(string[] args)
    {
        string one = "This is text one";
        string two = "This is string text two not string one";

        var coll = two.Split(' ').Select(p => one.Contains(p) ? p : p.ToUpperInvariant());

        Console.WriteLine(string.Join(" ", coll)); // This is STRING text TWO NOT STRING one
        Console.ReadKey();
    }
}

您可以将其分解为一个单独的方法,并将变量作为参数传入。

在string one=“this is text one”和string two=“this is string text two not string one”的第一个示例中,您的预期输出是什么-“this is string text two not string one”或“this is string text two not string one”。如果这两个字符串被交换,你期望得到什么结果?我建议你阅读一些算法,比如jaro winkler–winkler_distance@PaulF第二个例子是我所期望的。@PaulF类似这样的
value1=“这是一个新值”
value2=“这也是一个新值”
output=“这也是一个新值”
如果任何内容都不匹配,那么结果应该是什么:value1=“这是一个新值”;value2=“abc def ghi jkl mno”;这几乎就是我想要的。例如
value1=“这是一个新值”
value2=“这也是一个新值”
output=“这也是一个新值”
您越来越接近了。但是,当我输入value1=“这是一个新值”value2=“这也是一个新值”时,输出应该是“value2=“这也是一个新值”,但我改为“这也是一个新值”,我想输出类似的内容
value1=“这是一个新值”
value2=“这也是一个新值”
output=“这也是一个新值”
现在您的问题意味着更多。首先,你应该发现差异是一种描述和夸大的差异如果(item!=oneChar[index])item.toUpper();'但是您需要小心,因为差异字符可能已经是上字符了。如果这种情况发生在你的情况下,那将是一个问题。是的,我最初没有很好地描述我的问题。这可能发生在差异可能已经是上字符的地方。你能给我举个例子说明我是如何做到这一点的吗?这取决于你想要什么和你的场景。对你们来说,“新”、“新”、“新”、“新”等等是相同的还是不同的?因为不同的只是小写,大写。如果这些对您来说是相似的,那么当您比较字符并发现它们不同时,您应该找出字符大小写。像onechar[i]一样,使用小写并决定大写或小写。但如果char是一个数字,islower将返回false。所以有一个问题,你想解决它,但我认为你的方法不太好。我想你想向别人展示你的不同,所以你选择
class Program
{
    static void Main(string[] args)
    {
        string one = "This is text one";
        string two = "This is string text two not string one";

        var coll = two.Split(' ').Select(p => one.Contains(p) ? p : p.ToUpperInvariant());

        Console.WriteLine(string.Join(" ", coll)); // This is STRING text TWO NOT STRING one
        Console.ReadKey();
    }
}