【问题标题】:C# Identify the different character in comparison of 2 strings [closed]C#在比较2个字符串时识别不同的字符[关闭]
【发布时间】:2021-06-24 08:43:52
【问题描述】:

var str1 = "ASD_ZIHJK2A"; \\ 输出:对 1 个不同的字符:Z

var str2 = "ASD_YIHJK2A"; \\ 输出:对 1 个不同的字符:Y

var str3 = "AWD_PIHJK2A"; \\ 输出:对 2 个不同的字符:P

var str4 = "AWD_IHJK2AQ"; \\ 输出:对 2 个不同的字符:Q

var str5 = "ASD_RTHJK2A"; \\ 输出:对 3 个不同的字符:J

var str6 = "ASD_RTHIK2A";\输出:第 3 对差异:I

使用 C# 查找对中每个字符串的对和状态差异的最简单方法是什么?

-要比较的字符串长度相等

-字符串之间也包含数字

-“不同字符”在第二个字符串中的位置可以不同

【问题讨论】:

  • 您是否总是在处理两个仅在一个字符上不同的字符串?如果不是,实际使用的限制是什么?
  • 只包含符号还是包含顺序的区别?
  • “ABCD”和“DCBA”有什么区别(如果有的话)? “AAAB”和“AABA”怎么样? “ASD_ZIHJK”和“ASD_ZIHJKASD_YIHJK”怎么样?
  • 匹配字符串列表中的对,但字符串对将有 1 个精确的字符差异
  • 那么在这种情况下,您对“差异”的定义是“在字符串 1 中的单个字符并且在字符串 2 的相同位置上不同”?

标签: c# string string-comparison


【解决方案1】:

使用Linq.Except which 接近

产生两个序列的集合差。 两个集合的集合差定义为第一个集合的成员没有出现在第二个集合中。

此方法返回第一个不出现在第二个的元素。它不会在第二个中返回那些没有出现在第一个的元素。仅返回唯一元素。

var strOne = "ASD_ZIHJK";
var strTwo = "ASD_YIHJK";
var difference_strOne = strOne.Except(strTwo); // Z 
var difference_strTwo = strTwo.Except(strOne); // Y 

【讨论】:

  • OP 需要定义“不同”,你需要解释Except() 做了什么。如果我们反转其中一个字符串,输出将保持不变。这是故意的吗?
  • 通常,OP 不知道哪个答案是正确的。否则他们不会问。对于“ABBA”与“ABBB”,这个答案仍然失败。它对应于 OP 极其模糊的声明“1 个确切的字符差异”,但 Except() 不会报告任何内容。
  • 你是正确的@CodeCaster "ABBA" vs "ABBB" 它应该为第一个字符串返回“A”,为第二个字符串返回“B”
  • 谢谢@fubo,但是当谈到“ABBA”和“ABBB”时它不起作用
  • @newbies 请更新您的问题并指定输入和预期输出
【解决方案2】:

简单的解决方案

public static char? FindFirstDifference(string first, string second)
{
    int length = Math.Min(first.Length, second.Length);
    for (int = 0; i < length; i++)
    {
        if (first[i] != second[i])
        {
              return first[i];
        }
    }
    return null;
}

【讨论】:

    猜你喜欢
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    相关资源
    最近更新 更多